Intent有隱式啟動(dòng)和顯示啟動(dòng)兩種方式:
顯示啟動(dòng)就是指明啟動(dòng)的組件名稱 XXX.class
Intent xianshiIntent = new Intent(this,Main5Activity.class);
startActivity(xianshiIntent);
隱式啟動(dòng)就是通過在AndroidMainfest.xml中配置Activity的Intent-filter來控制啟動(dòng)
intent-filter中有三種參數(shù):action,category,data三種參數(shù),我通過不同的組合來觀察三種參數(shù)的匹配規(guī)則:
1 沒有intent-filter :略 根本不會(huì)有反應(yīng)
2 寫了intent-filter但是內(nèi)部不寫參數(shù) :我的編譯器無法通過編譯
3 寫了intent-filter只寫參數(shù)action
<activity android:name='.Main2Activity'>
<intent-filter>
<action android:name='com.pczhu.custom.action'/>
</intent-filter>
</activity>
報(bào)錯(cuò) android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.pczhu.custom.action }
4 action和category參數(shù)都添加:
<activity android:name=".Main2Activity">
<intent-filter>
<action android:name="com.pczhu.custom.action"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
代碼啟動(dòng):
Intent intent = new Intent();
intent.setAction("com.pczhu.custom.action");
//intent會(huì)為你默認(rèn)加上android.intent.category.DEFAULT
startActivity(intent);
正確啟動(dòng)
5 action和category參數(shù)都添加但是category寫成別的:匹配失敗
6 action和category參數(shù)都添加,另外添加data:
<activity android:name=".Main2Activity">
<intent-filter>
<action android:name="com.pczhu.custom.action"/>
<category android:name="android.intent.category.APP_EMAIL"/>
<data android:scheme="myscheme"/>
</intent-filter>
</activity>
代碼啟動(dòng)
Intent intent = new Intent();
intent.setAction("com.pczhu.custom.action");
// 不加 無法啟動(dòng)
// intent.setData(Uri.parse("abc://abc"));//無法啟動(dòng)
// intent.setData(Uri.parse("myscheme"));//無法啟動(dòng)
// intent.setData(Uri.parse("myscheme://"));//可以啟動(dòng)
// intent.setData(Uri.parse("myscheme://abc"));//可以啟動(dòng)
startActivity(intent);
7 action和data參數(shù)都添加 category不加:不能啟動(dòng)
8 多個(gè)Activity匹配彈出選擇框如圖