Android-隱式Intent,android-intent
隱式Intent表示不具體明確要開啟的activity,利用隱式intent我們可以開啟其他應用。
一個隱式intent的主要組成部分:
1.action 要執行的操作。
通常以intent類的常量表示。如:
訪問查看某個URL Intent.ACTION_VIEW
發送郵件 Intent.ACTION_SEND
2.data 要訪問的資料位置。
裝置以外的資料,如某個網頁URL
指向某個檔案的URI
指向ContentProvider中某條記錄的某個content URI
3.type 操作涉及的資料類型
如text/html或audio/mpeg3.
如果一個intent包含某類資料的位置,那麼通常可以從中推測出資料的類型。
4.category 可選類別
類別用於描述如何使用某個activity
android.intent.category.LAUNCHER:activity應該顯示在頂級應用程式啟動器中。
android.intent.category.INFO:雖然activity向使用者顯示了包資訊,但它不應該顯示在啟動器中。
android.intent.category.DEFAULT:DEFAULT類別必須明確的在intent過濾器中設定。如果說action告訴作業系統,activity能幹啥;
那麼DEFAULT類別告訴作業系統activity願意幹啥。DEFAULT 類別實際隱含添加到了幾乎每一個隱式intent中。(唯一的例外是LAUNCHER類別)
如同顯式intent,隱式intent也可以包含extra資訊。不過,作業系統在尋找合適的activity時,不會使用任何附加在隱式intent上的extra。
注意,隱式intent的action和data也可以與顯式intent聯合使用。這相當於要求特定的activity去處理特定任務。
由上舉例,如果想要一個用來查看某個網址的簡單隱式intent,需要
Action:Intent.ACTION_VIEW
URL:某個具體URL網址的uri資料
<intent-filter> <action android:name="android.intent.action.VIEW"/> <data android:scheme="http" android:host="www.baidu.com"/> <category android:name="android.intent.category.DEFAULT"/></intent-filter>
此外補充一點,由於隱式intent並不會明確告知要開啟哪些activity,有可能裝置上就不會有合適的應用。這時候應用就會崩潰。為此我們在使用隱式intent之前,應該先進行安全檢查,判斷是否有合適的activity。
Intent i=new Intent();....PackageManager pm=getActivity().getPackageManager();List<ResolveInfo> activities=pm.queryIntentActivities(i,0);if(activities.size()>0){//safe}else{//no suitable activity for this intent}