今天发了一篇关于android中Intent的文章,写完后感觉写的不是很清楚,在这对Intent隐式意图中的action、category、data单独做出说明
先写一个意图过滤器
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="aaa" android:host="www.zl.com" android:port="666" android:path="/aaa"/>
</intent-filter>
- 其中action 为一个动作,可以理解为是这个意图的名字,当有程序发出一个意图的时候就会和所有程序的清单文件匹配,最先找action和意图的action相同的activity再做后面的匹配。系统内置了很多action,也可以自定义,一般为了避免重复用包名+类名。
- data为数据类型,对应的URI为 aaa://www.zl.com:666/aaa 其中path前面一定要加/,在代码中写为
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse("aaa://www.zl.com:666/aaa"));
startActivity(intent);
}
- category为意图的分类,用来设置哪类应用可以调用。如果使用隐式意图的时候intent会自动添加一个category,所以意图过滤器中应该添加一个
<category android:name="android.intent.category.DEFAULT"/>
,否则会匹配不到
当一个意图可以和以上全部参数匹配的时候就能调用该activity