天天看點

Android Intent詳解

一、什麼是Intent 一個意圖是一個可以向元件 請求一個動作的 消息傳遞對象,即各元件使用Intent進行通信 。Intent促進元件之間的通信有這基本3個方面: 1.)啟動Activity startActivity()或者startActivityForResult()來啟動一個Activity 2.)啟動Service startService()來初始化或者發送新的指令到正在運作的Service bindService()來執行個體化并且綁定Service

3.)發送Broadcast  sendBroadcast(), sendOrderedBroadcast()或者 sendStickyBroadcast().來發送廣播到指定的BroadcastReceiver

二、顯示Intent與隐式Intent的差別

顯示Intent 通過元件的名稱(元件的全類名)來指定目标的元件,在自己的應用程式中使用顯示Intent啟動一個元件,因為你知道你想要啟動的Activity或者 Service的類名。 例如Activity啟動其他的Activity或者Service,啟動的元件隻有一個。
隐式Intent 在啟動元件的Intent中不指名元件的名稱,而是指定Action、Data、 Category屬性,然後當我們調用啟動元件的方法時,就會 去AndroidManfiest.xml中相關元件的Intent-filter,逐一比對出滿足屬性的元件。如果不止一個的話,會彈出讓我們選擇的對話框。

三、Intent的屬性

ComponentName(元件名稱) 即元件的名稱,在AndroidManfiest.xml配置檔案中設定的包名+元件的全限定類名組成,這是顯式Intent需要的設定的唯一屬性。 Intent中有setClass()、setClassName()、 setComponent()方法來設定,使用getComponent()方法擷取
Action(動作) 一個普通的字元串,代表Intent要完成的一個抽象"動作" 比如發資訊的權限,而具體的那個元件來完成,Intent并不負責,僅僅知道會有這個動作,誰來完成就交給Intent-filter進行篩選。 2種方式: 1.配置檔案中 <action android:name="android.intent.action.CALL" /> 2.代碼中 intent.setAction(Intent.ACTION_CALL);
Category(種類)

一個普通的字元串,為Action提供額外的類别資訊,兩者通常結合使用,一個Intent對象隻能有一個Action,但能有多個Category

2種方式:

1.配置檔案中

<category android:name="android.intent.category.

DEFAULT" />

2.代碼中

intent.addCategory(Intent.CATEGORY_DEFAULT)

DATA(資料)

Data通常用于向Action屬性提供操作的資料,接受一個URI對象。 URI格式:scheme://host:port/path  參數依次為:協定頭、 主機、端口、路徑

2種方式:

1.配置檔案中

<data android:mimeType="Intent的Type屬性"       android:scheme="Data的scheme協定頭"       android:host="Data的主機号"       android:port="Data的端口号"       android:path="Data的路徑"       android:pathPrefix="Data的path字首"       android:pathPattern="Data屬性的path的字元串模闆"                     />

2.代碼中

intent.setDataAndType(data, type);

Type(MIME類型) Type通常用于指定Data所制定的Uri隊友的MIME類型
Extras(額外) 通常用于多個Activity之間的資料交換,Extras的屬性是一個 Bundle對象,通過鍵值對進行資料存儲。
Flags(标記) 表示不同來源的标記,多數用于Android如何啟動Activity以及啟動後如何處理。 比如: intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)相當于加載模式中的singleTop模式。

四、Inten的使用

顯示Intent的使用

1.傳回Home界面

Intent intent = new Intent(); intent .setAction(Intent.ACTION_MAIN); intent .addCategory(Intent.CATEGORY_HOME); startActivity(intent );

2.打開連結位址

Intent intent = new Intent(); intent .setAction(Intent.ACTION_VIEW); intent .setData(Uri.parse("http://www.baidu.com")); startActivity(intent );

3.啟動Activity

Intent intent = new Intent(MainActivity.this,DemoActivity.class); startActivity(intent );

隐式Intent的使用

功能:所有Action為VIEW的Activity被篩選出來,由使用者進一步選擇: 核心代碼流程: 建立第二個Activity的布局,與對應的Activity,在第一個Activity的按鈕點選事件中添加一下代碼:

Intent it = new Intent(); it.setAction(Intent.ACTION_VIEW); startActivity(it);

最後在配置檔案中添加以下代碼:        

<activity android:name=".SecondActivity"             android:label="第二個Activity">             <intent-filter>                 <action android:name="android.intent.action.VIEW"/>                 <category android:name="android.intent.category.DEFAULT"/>             </intent-filter>                   </activity>