一、什麼是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> |