Android 中隐式启动组件的匹配规则主要是根据 Action、Category、Data来匹配。
Action:定义匹配动作,属性值为一个字符串
Category:属性用于指定当前动作(Action)被执行的环境。
Data:用于指定数据,通常是URI格式
Action匹配只要有一个与Intent中携带Action相同即可:
<activity android:name=".androidImplicitFilter.ActionActivity">
<intent-filter>
<action android:name="com.action.a" />
<action android:name="com.action.b" />
<action android:name="com.action.c" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Intent中只要携带"com.action.a"、"com.action.b"、"com.action.c"中的一个就可以启动ActionActivity
Category匹配要包含全部Intent中携带Category
Category是一个字符串,系统中预定义了一些Category,也可以自定义Category
Intent intent = new Intent("com.action.a");
intent.addCategory("com.category.a");
intent.addCategory("com.category.b");
startActivity(intent);
intent包含2个Category ,"com.category.a"、"com.category.b"。要启动的组件必须包含这两个Category
<activity android:name=".androidImplicitFilter.ActionActivity">
<intent-filter>
<action android:name="com.action.a" />
<action android:name="com.action.b" />
<action android:name="com.action.c" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.category.a" />
<category android:name="com.category.b" />
<category android:name="com.category.c" />
</intent-filter>
</activity>
Intent默认会携带"android.intent.category.DEFAULT",所以隐式启动的组件必须包含 <category android:name="android.intent.category.DEFAULT" />
Data匹配与Action相同
Data匹配规则与Action类似,Data一般由两部分组成mimeType和URI,mineType指资源类型包括文本、图片、音视频等等
URI结构如下:scheme://host:port/(path|pathPrefix|pathPatten)
例如 http://www.myHost:8080/user/index.html
content://com.download/file/10089
scheme:URI的协议例如http、file、content,如果URI没有指定scheme,那么这个URI即使有其他部分也是无效的
host:域名,如果未指定那么也没效果,URI也就无效
port:端口号,scheme和host指定时才有效
path|pathPrefix|pathPatten:包含路径信息
假如我们要通过响应一个超连接打开相应的组件,我们可以这样实现:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="myHost.app"
android:scheme="myScheme" />
</intent-filter>
详细请看:Android中Action、Category、Data匹配规则