咱們知道,實現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>