intent小结2

来源:互联网 发布:方正卡通字体优化 编辑:程序博客网 时间:2024/05/21 17:15
Intent总结04 Data和Type属性

 

1 介绍

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

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


2 示例和说明 

程序结构如下:


主界面如下:


我们在AndroidManifest中自定义一个类,并定义对应的data和type。如下:

  1. <activityandroid:nameactivityandroid:name=".DataTypeDestination">  
  2.             <intent-filter>  
  3.                 <actionandroid:nameactionandroid:name="DataTypeReceiverAction" />  
  4.                 <category android:name="android.intent.category.DEFAULT"/>  
  5.                 <dataandroid:mimeTypedataandroid:mimeType="vnd.android.cursor.item/receiver001" />  
  6.             </intent-filter>  
  7. </activity>  

2.1 示例一

有了上述定义之后,我们可以通过如下方法来跳转到DataTypeDestination。

  1. Intent intent=new Intent();   
  2. // 设置intent的type  
  3. // 跳转目的地是“DataTypeDestination”,  
  4. // 所以,这里type的参数"vnd.android.cursor.item/receiver001",必须AndroidManifest.xml中DataTypeDestination的mimeTyep一样。  
  5. intent.setType("vnd.android.cursor.item/receiver001");  
  6. // 设置intent的action。  
  7. // 跳转目的地是“DataTypeDestination”,  
  8. // 所以,这里action的参数"DataTypeReceiverAction",必须AndroidManifest.xml中DataTypeDestination的action一样。  
  9. intent.setAction("DataTypeReceiverAction");   
  10. startActivity(intent);  
  11. // 退出当前应用程序  
  12. finish();  

上述代码对应“主界面的self按钮的响应程序”。点击self按钮,进入如下界面:


2.2 示例二

若单独只设置type,亦可找到匹配的类。如下:

  1. // 和 AndroidManifest.xml中DataTypeDestination的intent-filter 相比,  
  2. // 仅仅只设置了type。但仍然能匹配到DataTypeDestination  
  3. Intent intent=new Intent();   
  4. intent.setType("vnd.android.cursor.item/receiver001");  
  5. //intent.setAction("DataTypeReceiverAction");   
  6. startActivity(intent);  
  7. finish();  

上述代码对应“主界面的Less按钮的响应程序”。点击Less按钮,进入如下界面:


3.3 示例三

但若多设置了data,则无法匹配到对应的类。如下:

  1. // 和 AndroidManifest.xml中DataTypeDestination的intent-filter 相比,  
  2. // 多设置了属性data。无法找到对应的activity!!!  
  3. Intent intent=new Intent();   
  4. intent.setAction("DataTypeReceiverAction");   
  5. intent.setType("vnd.android.cursor.item/receiver001");  
  6. Stringdata="content://contacts/people/1";   
  7. Uri uri = Uri.parse(data);   
  8. intent.setData(uri);   
  9. startActivity(intent);   
  10. finish();  

上述代码对应“主界面的More按钮的响应程序”。点击More按钮,进入如下界面:


3.4 示例四

 单独只设置了type仍然能匹配到对应的class,但若只设置了data,则无法匹配到对应的class。如下:

  1. // 设置了action和data,能正确匹配。  
  2. Stringdata="content://contacts/people/1";   
  3. Uri uri = Uri.parse(data);   
  4. Intent intent = new Intent();   
  5. intent.setData(uri);   
  6. intent.setAction(Intent.ACTION_VIEW);   
  7. startActivity(intent);  
  8. finish();  

上述代码对应“主界面的DataAndAction按钮的响应程序”。在点击DataAndAction按钮之前,先进入Contacts(即联系人),并添加一个联系人(如添加联系人姓名:skywang,号码:13410177756)。然后,点击DataAndAction进入如下界面:


3.5 示例五

  1. // 相比上面同时设置了action和data,  
  2. // 这里只单独设置了intent的data参数,无法正确匹配!  
  3. Intent intent=new Intent();  
  4. Stringdata="content://contacts/people/1";   
  5. Uri uri = Uri.parse(data);   
  6. intent.setData(uri);  
  7. startActivity(intent);    
  8. finish();  


上述代码对应“主界面的DataOnly按钮的响应程序”。点击DataOnly按钮,直接退出应用程序。这是因为没有匹配到对应的Activity。


0 0
原创粉丝点击