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。
点击下载:示例代码