Intent总结04 Data和Type属性
1 介绍
data和type的作用请参考“Intent总结01 Intent的结构”。
下面用代码对intent的data、type属性进行介绍。主要介绍的内容是,如何定义intent的data、type属性,并如何调用。
2 示例和说明
程序结构如下:

主界面如下:

我们在AndroidManifest中自定义一个类,并定义对应的data和type。如下:
<activityandroid:name=".DataTypeDestination">
<intent-filter>
<actionandroid:name="DataTypeReceiverAction" />
<category android:name="android.intent.category.DEFAULT"/>
<dataandroid:mimeType="vnd.android.cursor.item/receiver001" />
</intent-filter>
</activity>
2.1 示例一
有了上述定义之后,我们可以通过如下方法来跳转到DataTypeDestination。
Intent intent=new Intent();
// 设置intent的type
// 跳转目的地是“DataTypeDestination”,
// 所以,这里type的参数"vnd.android.cursor.item/receiver001",必须AndroidManifest.xml中DataTypeDestination的mimeTyep一样。
intent.setType("vnd.android.cursor.item/receiver001");
// 设置intent的action。
// 跳转目的地是“DataTypeDestination”,
// 所以,这里action的参数"DataTypeReceiverAction",必须AndroidManifest.xml中DataTypeDestination的action一样。
intent.setAction("DataTypeReceiverAction");
startActivity(intent);
// 退出当前应用程序
finish();上述代码对应“主界面的self按钮的响应程序”。点击self按钮,进入如下界面:

2.2 示例二
若单独只设置type,亦可找到匹配的类。如下:
// 和 AndroidManifest.xml中DataTypeDestination的intent-filter 相比,
// 仅仅只设置了type。但仍然能匹配到DataTypeDestination
Intent intent=new Intent();
intent.setType("vnd.android.cursor.item/receiver001");
//intent.setAction("DataTypeReceiverAction");
startActivity(intent);
finish();上述代码对应“主界面的Less按钮的响应程序”。点击Less按钮,进入如下界面:

3.3 示例三
但若多设置了data,则无法匹配到对应的类。如下:
// 和 AndroidManifest.xml中DataTypeDestination的intent-filter 相比,
// 多设置了属性data。无法找到对应的activity!!!
Intent intent=new Intent();
intent.setAction("DataTypeReceiverAction");
intent.setType("vnd.android.cursor.item/receiver001");
Stringdata="content://contacts/people/1";
Uri uri = Uri.parse(data);
intent.setData(uri);
startActivity(intent);
finish();上述代码对应“主界面的More按钮的响应程序”。点击More按钮,进入如下界面:

3.4 示例四
单独只设置了type仍然能匹配到对应的class,但若只设置了data,则无法匹配到对应的class。如下:
// 设置了action和data,能正确匹配。 Stringdata="content://contacts/people/1"; Uri uri = Uri.parse(data); Intent intent = new Intent(); intent.setData(uri); intent.setAction(Intent.ACTION_VIEW); startActivity(intent); finish();
上述代码对应“主界面的DataAndAction按钮的响应程序”。在点击DataAndAction按钮之前,先进入Contacts(即联系人),并添加一个联系人(如添加联系人姓名:skywang,号码:13410177756)。然后,点击DataAndAction进入如下界面:

3.5 示例五
// 相比上面同时设置了action和data, // 这里只单独设置了intent的data参数,无法正确匹配! Intent intent=new Intent(); Stringdata="content://contacts/people/1"; Uri uri = Uri.parse(data); intent.setData(uri); startActivity(intent); finish();
上述代码对应“主界面的DataOnly按钮的响应程序”。点击DataOnly按钮,直接退出应用程序。这是因为没有匹配到对应的Activity。
点击下载:示例代码
