android中的意图分为显示意图和隐式意图。显示意图明确指出了所要激活的组件,而显示意图则不是。
在隐式意图中,一般通过action 、category 、data指定意图要转向的组件(以activity为例):
清单文件中的配置:
<activity
android:name="com.example.intent.OtherActivity"
android:label="@string/title_activity_other" >
<intent-filter>
<action android:name="xxx"/>
<action android:name="yyy"/>
<category android:name="xxx"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
<data android:scheme="zzz"/>
<data android:scheme="fff" android:host="www.test.cn" android:port="8080" android:path="/intent" />
</intent-filter>
</activity>
(1)如果未指定data的情况下:在MainActivity中设定
Intent intent = new Intent();
intent.setAction("xxx");
intent.addCategory("xxx"); 当前类别在intent-filter中不存在
startActivity(intent);
就可以通过<intent-filter>找到需要进一步处理的活动。
注:
1.在通过隐式意图激活组件的时候默认的会给intent添加一个类别android.intent.category.DEFAULT,
因此在清单文件的intent-filter中需要添加一个默认类别<category android:name="android.intent.category.DEFAULT"/>否则报错
2. 通过intent设置的action以及category的对应值必须在清单文件中都存在。
(2)如果需要指定data, android:scheme属性规定了数据的格式必须以zzz://或者fff://开头 android:host 为主机名 android:port:端口号 android:path:路径
Intent intent = new Intent();
intent.setData(Uri.parse("fff://www.test.cn:8080/intent"));
startActivity(intent);
(3)如果需要同时指定数据以及类型:则在程序中需要同时设定
Intent-Filter中的<data>有一个mimeType . 它的作用是告诉Android系统本Activity可以处理的文件的类型。如设置为 “image/gif”表示可以处理“.gif”图像文件
Intent intent = new Intent();
intent.setDataAndType(Uri.parse("fff://www.test.cn:8080/intent"), "image/gif");
startActivity(intent);