Android Intent 是承載一個意圖,即對象。將消息從一個組件傳到另一個組件,在應用程序或應用程序之外。Intent 之間溝通信息的任何應用程序的三個核心組件 - 活動,服務和廣播接收器。
意圖本身是一個Intent對象,是一種被動的數(shù)據(jù)結構保持將要執(zhí)行的動作的抽象描述。
例如,讓我們假設有一個Activity ,需要啟動電子郵件客戶端和發(fā)送電子郵件,使用Android設備。為了達到這個目的,Activity會隨著適當選擇器,一個ACTION_SEND發(fā)送到 Android Intent 解析器。指定的選擇器提供適當?shù)慕涌诠┯脩暨x擇如何發(fā)送電子郵件數(shù)據(jù)。
例如,有一個Activity ,需要在 Android 設備上用Web瀏覽器打開網(wǎng)址。為了達到這個目的Activity將發(fā)送ACTION_WEB_SEARCH Intent 到Android Intent 解析器,并在Web瀏覽器中打開給定的URL。Intent 解析器解析通過一個活動列表,并選擇一個最合適的 Intent ,在這種情況下,就是Web瀏覽器活動。Intent通過網(wǎng)頁解析后,網(wǎng)頁瀏覽器啟動 Web 瀏覽器活動。
分開機制對于每種類型的組件提供意圖,如:活動,服務和廣播接收器。
| S.N. | 方法& 描述 |
|---|---|
| 1 |
Context.startActivity() Intent對象傳遞給此方法來啟動一個新的活動或獲得現(xiàn)有活動來做一些新的東西。 |
| 2 |
Context.startService() Intent對象傳遞給此方法來啟動服務或提供新的指令到一個持續(xù)的服務。 |
| 3 |
Context.sendBroadcast() Intent對象傳遞給這個方法消息給所有感興趣的廣播接收器。 |
Intent對象是成捆的信息,這些信息所使用的組件,它接收的意圖和Android系統(tǒng)中的信息。
Intent對象可以基于它是什么交流或要執(zhí)行,包含以下組件:
強制Intent對象是一個字符串,命名要執(zhí)行操作或廣播意圖,正在發(fā)生的動作和報告。動作在很大程度上決定意圖對象的其余部分的結構如何。Intent類定義了一些動作常數(shù)對應不同的意圖。下面列出的是 Android Intent標準動作
動作在一個Intent對象的 setAction() 方法可以設置,通過 getAction() 方法讀取。
要采取動作的數(shù)據(jù)的URI和該數(shù)據(jù)的MIME類型。例如,如果動作字段ACTION_EDIT,在數(shù)據(jù)字段將包含要顯示的編輯的文檔的URI。
setData()方法指定數(shù)據(jù)僅作為URI的setType()指定它只能作為一個MIME類型,和setDataAndType()指定它作為一個URI和MIME類型。讀取的URI由getData()和getType()。
操作/數(shù)據(jù)對的一些例子是:
| S.N. | 動作/數(shù)據(jù)對和說明 |
|---|---|
| 1 |
ACTION_VIEW content://contacts/people/1 顯示有關其標識符為“1”的人的信息。 |
| 2 |
ACTION_DIAL content://contacts/people/1 顯示電話撥號程序已填充的人。 |
| 3 |
ACTION_VIEW tel:123 顯示電話撥號程序已填充的給定數(shù)。 |
| 4 |
ACTION_DIAL tel:123 顯示電話撥號程序已填充的給定數(shù)。 |
| 5 |
ACTION_EDIT content://contacts/people/1 編輯有關其標識符為“1”的人的信息。 |
| 6 |
ACTION_VIEW content://contacts/people/ 顯示人的列表,用戶可以瀏覽。 |
類別是 Intent 對象一個可選部分,這是一個字符串,其中包含應該處理這個 Intent 組件的附加信息。 addCategory()方法將類別添加到 Intent對象,removeCategory() 刪除一個類別,GetCategories() 得到當前在對象的所有類別集合。下面是 Android意圖標準類別 列表。
要查看詳細的 Intent過濾器可在下一小節(jié),了解如何使用類別,選擇合適的活動對應的意圖。
這是鍵-值對,可了解更多傳遞組件處理 intent 的信息。額外內(nèi)容設置和讀取使用 putExtras() 和 getExtras() 方法。這里是一個 Android intent 標準額外數(shù)據(jù)列表。
這些標志是Intent對象可選部分,并指示Android系統(tǒng)如何啟動一個活動以及如何對待它在啟動后等等。
可選字段是一個 android 組件名稱的活動,服務或BroadcastReceiver類對象。如果它沒有被設置,Android使用Intent 對象的信息,找到一個合適的目標,Intent 對象傳遞到指定類的一個實例。
組件名稱由setComponent(),setClass()設置,由 setClassName()和 getComponent()讀取。
有以下兩種類型的意圖支持到 Android 4.1版本
顯示意圖指定目標組件的名稱,通常用于應用程序內(nèi)部消息 - 比如一個活動啟動從??服務或啟動一個組活動。例如:
// Explicit Intent by specifying its class name Intent i = new Intent(this, TargetActivity.class); i.putExtra("Key1", "ABC"); i.putExtra("Key2", "123"); // Starts TargetActivity startActivity(i);
這些意圖由其的名字指定目標組件,它們通常用于應用程序內(nèi)部消息 - 例如一個活動啟動一個附屬服務或啟動一個姐妹的活動。例如:
// Implicit Intent by specifying a URI Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); // Starts Implicit Activity startActivity(i);
目標組件接收的意圖可以使用getExtras()方法來獲得組件發(fā)送額外的數(shù)據(jù)源。例如:
// Get bundle object at appropriate place in your code Bundle extras = getIntent().getExtras(); // Extract data using passed keys String value1 = extras.getString("Key1"); String value2 = extras.getString("Key2");
下面的例子展示了Android意圖的功能,啟動各種 Android 的內(nèi)置應用。
| 步驟 | 描述 |
|---|---|
| 1 | 使用Eclipse IDE創(chuàng)建Android應用程序,并將其命名為IntentDemo在com.example.intentdemo包下。在創(chuàng)建這個項目,請確保目標SDK并編譯在Android SDK的最新版本為使用更高級別的API。 |
| 2 | 修改 src/MainActivity.java 文件,并添加代碼來定義相應的兩個按鈕,即兩個監(jiān)聽器。啟動瀏覽器,并打開電話。 |
| 3 | 修改布局XML文件res/layout/activity_main.xml添加三個按鈕的設置為線性布局。 |
| 4 | 修改 res/values/strings.xml 中定義所需的常量值 |
| 5 | 運行該應用程序啟動Android模擬器來驗證應用程序所做的修改結果。 |
以下是修改主要活動文件 src/com.example.intentdemo/MainActivity.java 的內(nèi)容:
package com.example.intentdemo; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button startBrowser = (Button) findViewById(R.id.start_browser); startBrowser.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); startActivity(i); } }); Button startPhone =上一篇:Android Button