• Intent总结04 Data和Type属性


    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。


    点击下载:示例代码

     

  • 相关阅读:
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    5个最顶级jQuery图表类库插件-Charting plugin
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3165551.html
Copyright © 2020-2023  润新知