Intent有隐式启动和显示启动两种方式:
显示启动就是指明启动的组件名称 XXX.class
Intent xianshiIntent = new Intent(this,Main5Activity.class);
startActivity(xianshiIntent);
隐式启动就是通过在AndroidMainfest.xml中配置Activity的Intent-filter来控制启动
intent-filter中有三种参数:action,category,data三种参数,我通过不同的组合来观察三种参数的匹配规则:
1 没有intent-filter :略 根本不会有反应
2 写了intent-filter但是内部不写参数 :我的编译器无法通过编译
3 写了intent-filter只写参数action
<activity android:name='.Main2Activity'>
<intent-filter>
<action android:name='com.pczhu.custom.action'/>
</intent-filter>
</activity>
报错 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.pczhu.custom.action }
4 action和category参数都添加:
<activity android:name=".Main2Activity">
<intent-filter>
<action android:name="com.pczhu.custom.action"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
代码启动:
Intent intent = new Intent();
intent.setAction("com.pczhu.custom.action");
//intent会为你默认加上android.intent.category.DEFAULT
startActivity(intent);
正确启动
5 action和category参数都添加但是category写成别的:匹配失败
6 action和category参数都添加,另外添加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>
代码启动
Intent intent = new Intent();
intent.setAction("com.pczhu.custom.action");
// 不加 无法启动
// intent.setData(Uri.parse("abc://abc"));//无法启动
// intent.setData(Uri.parse("myscheme"));//无法启动
// intent.setData(Uri.parse("myscheme://"));//可以启动
// intent.setData(Uri.parse("myscheme://abc"));//可以启动
startActivity(intent);
7 action和data参数都添加 category不加:不能启动
8 多个Activity匹配弹出选择框如图
网友评论