Android Intent 是承載一個意圖,即對象。將消息從一個組件傳到另一個組件,在應(yīng)用程序或應(yīng)用程序之外。Intent 之間溝通信息的任何應(yīng)用程序的三個核心組件 - 活動,服務(wù)和廣播接收器。
意圖本身是一個Intent對象,是一種被動的數(shù)據(jù)結(jié)構(gòu)保持將要執(zhí)行的動作的抽象描述。
例如,讓我們假設(shè)有一個Activity ,需要啟動電子郵件客戶端和發(fā)送電子郵件,使用Android設(shè)備。為了達(dá)到這個目的,Activity會隨著適當(dāng)選擇器,一個ACTION_SEND發(fā)送到 Android Intent 解析器。指定的選擇器提供適當(dāng)?shù)慕涌诠┯脩暨x擇如何發(fā)送電子郵件數(shù)據(jù)。
例如,有一個Activity ,需要在 Android 設(shè)備上用Web瀏覽器打開網(wǎng)址。為了達(dá)到這個目的Activity將發(fā)送ACTION_WEB_SEARCH Intent 到Android Intent 解析器,并在Web瀏覽器中打開給定的URL。Intent 解析器解析通過一個活動列表,并選擇一個最合適的 Intent ,在這種情況下,就是Web瀏覽器活動。Intent通過網(wǎng)頁解析后,網(wǎng)頁瀏覽器啟動 Web 瀏覽器活動。
分開機(jī)制對于每種類型的組件提供意圖,如:活動,服務(wù)和廣播接收器。
| S.N. | 方法& 描述 |
|---|---|
| 1 |
Context.startActivity() Intent對象傳遞給此方法來啟動一個新的活動或獲得現(xiàn)有活動來做一些新的東西。 |
| 2 |
Context.startService() Intent對象傳遞給此方法來啟動服務(wù)或提供新的指令到一個持續(xù)的服務(wù)。 |
| 3 |
Context.sendBroadcast() Intent對象傳遞給這個方法消息給所有感興趣的廣播接收器。 |
Intent對象是成捆的信息,這些信息所使用的組件,它接收的意圖和Android系統(tǒng)中的信息。
Intent對象可以基于它是什么交流或要執(zhí)行,包含以下組件:
強(qiáng)制Intent對象是一個字符串,命名要執(zhí)行操作或廣播意圖,正在發(fā)生的動作和報告。動作在很大程度上決定意圖對象的其余部分的結(jié)構(gòu)如何。Intent類定義了一些動作常數(shù)對應(yīng)不同的意圖。下面列出的是 Android Intent標(biāo)準(zhǔn)動作
動作在一個Intent對象的 setAction() 方法可以設(shè)置,通過 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 顯示有關(guān)其標(biāo)識符為“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 編輯有關(guān)其標(biāo)識符為“1”的人的信息。 |
| 6 |
ACTION_VIEW content://contacts/people/ 顯示人的列表,用戶可以瀏覽。 |
類別是 Intent 對象一個可選部分,這是一個字符串,其中包含應(yīng)該處理這個 Intent 組件的附加信息。 addCategory()方法將類別添加到 Intent對象,removeCategory() 刪除一個類別,GetCategories() 得到當(dāng)前在對象的所有類別集合。下面是 Android意圖標(biāo)準(zhǔn)類別 列表。
要查看詳細(xì)的 Intent過濾器可在下一小節(jié),了解如何使用類別,選擇合適的活動對應(yīng)的意圖。
這是鍵-值對,可了解更多傳遞組件處理 intent 的信息。額外內(nèi)容設(shè)置和讀取使用 putExtras() 和 getExtras() 方法。這里是一個 Android intent 標(biāo)準(zhǔn)額外數(shù)據(jù)列表。
這些標(biāo)志是Intent對象可選部分,并指示Android系統(tǒng)如何啟動一個活動以及如何對待它在啟動后等等。
可選字段是一個 android 組件名稱的活動,服務(wù)或BroadcastReceiver類對象。如果它沒有被設(shè)置,Android使用Intent 對象的信息,找到一個合適的目標(biāo),Intent 對象傳遞到指定類的一個實(shí)例。
組件名稱由setComponent(),setClass()設(shè)置,由 setClassName()和 getComponent()讀取。
有以下兩種類型的意圖支持到 Android 4.1版本
顯示意圖指定目標(biāo)組件的名稱,通常用于應(yīng)用程序內(nèi)部消息 - 比如一個活動啟動從??服務(wù)或啟動一個組活動。例如:
// 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);
這些意圖由其的名字指定目標(biāo)組件,它們通常用于應(yīng)用程序內(nèi)部消息 - 例如一個活動啟動一個附屬服務(wù)或啟動一個姐妹的活動。例如:
// Implicit Intent by specifying a URI Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); // Starts Implicit Activity startActivity(i);
目標(biāo)組件接收的意圖可以使用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)置應(yīng)用。
| 步驟 | 描述 |
|---|---|
| 1 | 使用Eclipse IDE創(chuàng)建Android應(yīng)用程序,并將其命名為IntentDemo在com.example.intentdemo包下。在創(chuàng)建這個項(xiàng)目,請確保目標(biāo)SDK并編譯在Android SDK的最新版本為使用更高級別的API。 |
| 2 | 修改 src/MainActivity.java 文件,并添加代碼來定義相應(yīng)的兩個按鈕,即兩個監(jiān)聽器。啟動瀏覽器,并打開電話。 |
| 3 | 修改布局XML文件res/layout/activity_main.xml添加三個按鈕的設(shè)置為線性布局。 |
| 4 | 修改 res/values/strings.xml 中定義所需的常量值 |
| 5 | 運(yùn)行該應(yīng)用程序啟動Android模擬器來驗(yàn)證應(yīng)用程序所做的修改結(jié)果。 |
以下是修改主要活動文件 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