Intent总结04 Data和Type属性

时间:2021-11-16 16:11:22
Intent总结04 Data和Type属性

 

1 介绍

data和type的作用请参考“Intent总结01 Intent的结构”。

下面用代码对intent的data、type属性进行介绍。主要介绍的内容是,如何定义intent的data、type属性,并如何调用。


2 示例和说明 

程序结构如下:

Intent总结04 Data和Type属性

主界面如下:

Intent总结04 Data和Type属性

我们在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按钮,进入如下界面:

Intent总结04 Data和Type属性


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按钮,进入如下界面:

Intent总结04 Data和Type属性

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按钮,进入如下界面:

Intent总结04 Data和Type属性

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进入如下界面:

Intent总结04 Data和Type属性

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。


点击下载:示例代码