android細節之android.intent.category.DEFAULT的使用

咱們知道,實現android的Activity之間相互跳轉須要用到Intent,android

Intent又分爲顯式Intent和隱式Intent,微信

顯式Intent很簡單,好比我在FirstActivity中想跳轉到SecondActivity,只須要直接聲明就好了:this

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

 

 

而在使用隱式Intent實現Activity之間跳轉的時候,並無明確指定要打開哪一個activity,spa

而是經過指定3個參數:action,category,data,code

而後讓系統去尋找可以匹配得上這三個參數的Acativity,若是有多個符合條件的Activity,就會讓用戶選擇其中一個打開。xml

例如我選擇手機相冊中的一張照片,點擊「發送」按鈕:blog

而後就可讓我選擇是發送給QQ好友,微信好友仍是發送到朋友圈。這實際上就是一個隱式Intent啓動Activity的實例。string

 

而決定一個Activity可以響應哪些Intent,就須要在AndroidManifest.xml的<activity>標籤下配置<intent-filter>的內容,能夠指定當前活動可以響應的action,category和data,好比說我在SecondActivity下設置以下代碼:it

複製代碼
<activity
android:name=".SecondActivity" android:label="@string/title_activity_second" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MYACTION" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MYCATEGORY" /> </intent-filter>
</activity>
複製代碼

 

再在MainActivity中經過隱式Intent:io

Intent intent=new Intent("android.intent.action.MYACTION");
startActivity(intent);

 

而後就啓動了SecondActivity。

 

在這裏,看似咱們在Intent中只指定了要打開的活動只須要響應一個Action爲「android.intent.action.MYACTION」就行,可是實際上,系統在使用隱式Intent的時候,會自動幫咱們添加上「android.intent.category.default」,因此——實際上全部須要被隱式Intent啓動的activity,都要加上<category android:name="android.intent.category.DEFAULT" />這一段聲明,不然就會啓動不了並提示沒法匹配該Intent的錯誤:

 

若是你要隱式啓動的那個活動是程序最早啓動的那個activity,

即聲明瞭<category android:name="android.intent.category.LAUNCHER" />,

就能夠不用寫<category android:name="android.intent.category.DEFAULT" />的聲明瞭,

(在這裏LAUNCHER,就是你打開程序,最早啓動的那一個Activity。)另外,LAUNCHER必定要配合action MAIN一塊兒使用,不然不會啓動,即:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
相關文章
相關標籤/搜索