顯式Intent與隱式Intent的功能與使用方法解析。,intent使用方法
顯式Intent與隱式Intent的功能與使用方法解析。
Intent,在中文中的意思是意圖。就是想要做的事。
而使用startActivity(Intentintent)或者startActivityForResult(Intentintent)或者別的使用它的方法,形象地說就是指 去做你想要做的事。(do what you want to do)
首先,大體的介紹一下它們的使用差別:
1.Explicit Intent(顯式意圖):主要用於調用自身應用程式的組件(activity,service),或者其他程式的明確想調用的一直的組件。(這個比較少用,因為很少會這樣調用)
2.Implicit Intent(隱式意圖):主要用於啟動除本程式以外的程式。
然後講講各自的使用方法吧。
一:ExplicitIntent:
使用前首先應該有一個Intent吧?我們先來建立一個。
建立方法。Intent intent = newIntent(Context context,Class<?> class);
後面的那個class參數呢,是一個類的反射。
你也可以記作為目標Activity所在類的 類名.class;
使用:
startActivity(intent)或startActivityForResult(intent);
然後就可以了。
二.ImplicitIntent
我們以兩個角色的身份來進行解析。
首先,調用者身份。(就是想跳到別的應用程式的當前應用程式)
建立隱式Intent的主要的方法:
初始帶Action:Intent(String action)
空的Intent: Intent();
初始同時帶Action和Uri: Intent(String action, Uri uri);
其實這三種方法使用上差別不大,只是初始設定的參數多一點的構造方法有時候簡便一點而已。
Intent也可以在構建之後再設定或者改變參數值。
如:intent.setAction(String action) 還有Uri設定:setData(Uri uri),MIME類型:setType()等
需要注意的一點是,如果需要同時設定URI和MIME類型的時候,使用setDataAndType()方法,因為當你分別調用setData和setType時,他們會令到他們兩個中的另一個失效。為什麼呢?因為其實URI中也有設定Type的,會衝突,覆蓋另一個設定。
還有別的屬性,也是非常關鍵的。建議查閱Android開發文檔。因為我個人說的再好,也不如你自己動手去尋找,去探索。
調用隱式的Intent也和調用顯式的一樣。
隱式調用Intent的時候呢,如果你想啟動的具有某種功能的程式有多個,比如在你使用你個人想傳送檔案的時候,有很多個程式出來讓你選吧?比如藍芽,QQ什麼的。如果可以實現某個功能的程式有多個,就會出現一個列表來讓你進行選擇。只有單個程式的時候直接啟動這個程式。
那麼通常來說自己不知道啟動什麼程式,而系統自己就啟動了,這樣使用者的體驗效果是不是很不好?這時,就可以來實現一個儘管只有單個程式也出現選擇框的功能:Chooser.
Chooser本身也是一個Intent,只是它是一個附加有選取器的Intent。
使用樣本:
Intent intent =new Intent();
…
Intent chooser =intent.createChooser(intent,title);
這裡的title就是選擇框的標題字串。
2.接收隱式Intent
如果你想讓你的程式能接受來自與別的程式的隱式的Intent,那麼該如何做?
在資訊清單檔(Manifest)裡聲明你能接收某個類型的隱式Intent。
如:
<activityandroid:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
首先來解析一下Intent-filte的中文翻譯吧.Intent(意圖)的過濾器。
那麼為什麼要有這個過濾器啊?
首先你來想一下,如果沒有過濾器這東西,那麼,當你想要啟動具有某個功能的程式的時候,系統就不能識別哪些程式能用哪些功能,就嗶哩啪啦的把所有的引用都列出來。這樣是不是很不好啊?
系統預設,如果一個應用中沒有任何的意圖過濾器(Intent-filter)那麼,任何的東西都不能通過它的審核。
可以把應用想象成一個飲水機,意圖過濾器就是用來過濾水的。那麼當一個飲水機(應用)沒有過濾器的時候,我是不是寧願讓它不能通過審核給人喝?沒過濾過的很容易有很多有害的物質。沒過濾過的你敢喝?。
當我們有過濾器了,心裡就放心點了,就能夠喝通過了過濾器過濾的水(相當於使用通過了審查的應用)。
那麼,接下來又有一個疑問了。
怎麼進行意圖的過濾?
答案當然是要一層一層的過濾啦。
圖中的data為URI和MIME類型。
只要有一條路徑能通過,那就是通過了,就能使用該程式的部分特定功能了。
如果想更詳細的查看關於Intent的方面,請查看android官方文檔。