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


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

Intent又分為顯式Intent和隱式Intent,

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

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

 

 

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

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

然后讓系統去尋找能夠匹配得上這三個參數的Acativity,如果有多個符合條件的Activity,就會讓用戶選擇其中一個打開。

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

然后就可以讓我選擇是發送給QQ好友,微信好友還是發送到朋友圈。這實際上就是一個隱式Intent啟動Activity的實例。

 

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

<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:

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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM