intent-filter中的三个子选项的使用 action----intent-filter-------------data的说明

2024-01-16 04:32

本文主要是介绍intent-filter中的三个子选项的使用 action----intent-filter-------------data的说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用


转自 http://blog.csdn.net/chenzheng_java/article/details/6266135

你是不是很多时候,想从弹出的电话本姓名列表中中查找到某个人,然后再获取该人的详细信息呢?

你是不是想选择从弹出的列表中选择一张图片,然后将其进行进一步的操作呢?

如果,你想,那你是不是很像知道,我们应该怎么让其弹出来一张选择列表,又应该怎么代码实现后边的操作呢?

Itent.ACTION_PICK  Intent.ACTION_GET_CONTENT 两者都可以完成类似的功能,让我们一起来看下例子:

第一:Intent.ACTION_PICK

首先添加一个权限: 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
发起一个 Contact Picker 
Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI); 
startActivityForResult(intent, PICK_CONTACT); 
重写方法 
@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) 
  {  
      super.onActivityResult(reqCode, resultCode, data);  
        switch (reqCode) { 
             case (PICK_CONTACT) :      
             if (resultCode == Activity.RESULT_OK) {        
             Uri contactData = data.getData();        
             Cursor c =  managedQuery(contactData, null, null, null, null);        
             if (c.moveToFirst()) {          
                String name = c.getString(c.getColumnIndexOrThrow(People.NAME));          
                // TODO Whatever you want to do with the selected contact name.        
                                 }      
                      }      
               
      break;  
                
         } 
   } 

例如 
String[] columns = new String[] {People.NAME}; 
int[] names = new int[] {R.id.row_entry}; 
mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names); 
setListAdapter(mAdapter);
第二:Intent.ACTION_GET_CONTENT
我们可以发现,其实action_get_content是通过intent中设置的type属性来判断具体调用哪个程序的。
  1. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);   
  2. intent.setType("audio/*");   
  3. startActivity(Intent.createChooser(intent, "Select music"));  
[java]  view plain copy
  1. <span style="font-family: comic sans ms,sans-serif;"><span style="font-size: x-small;">Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
  2. intent.setType("audio/*");  
  3. startActivity(Intent.createChooser(intent, "Select music"));</span></span>  

 

 

执行之 会弹出一个对话框 效果为:

 

 

 

 

 

 

其实 对于这段代码 大家应该都能猜出什么意思  现自己模拟并理解之

 

 

 

[代码]

 

1. 定义TestActivity 用于根据传入Uri  播放目标

 

Java代码
  1. public class TestActivity extends Activity {   
  2.        
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {   
  5.         super.onCreate(savedInstanceState);   
  6.         setContentView(R.layout.main);   
  7.         this.setTitle("TestActivity");   
  8.            
  9.         Intent i = this.getIntent();   
  10.            
  11.         Uri u = i.getData();   
  12.            
  13.         try {   
  14.             playMusic(u);   
  15.         } catch (IllegalArgumentException e) {   
  16.             // TODO Auto-generated catch block   
  17.             e.printStackTrace();   
  18.         } catch (SecurityException e) {   
  19.             // TODO Auto-generated catch block   
  20.             e.printStackTrace();   
  21.         } catch (IllegalStateException e) {   
  22.             // TODO Auto-generated catch block   
  23.             e.printStackTrace();   
  24.         } catch (IOException e) {   
  25.             // TODO Auto-generated catch block   
  26.             e.printStackTrace();   
  27.         }   
  28.     }   
  29.        
  30.     public void playMusic(Uri uri) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{   
  31.         MediaPlayer mp = new MediaPlayer();   
  32.         mp.setDataSource(this, uri);   
  33.         mp.prepare();   
  34.         mp.start();   
  35.     }   
  36. }  
[java]  view plain copy
  1. <span style="font-family: comic sans ms,sans-serif;"><span style="font-size: x-small;">public class TestActivity extends Activity {  
  2.       
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         this.setTitle("TestActivity");  
  8.           
  9.         Intent i = this.getIntent();  
  10.           
  11.         Uri u = i.getData();  
  12.           
  13.         try {  
  14.             playMusic(u);  
  15.         } catch (IllegalArgumentException e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         } catch (SecurityException e) {  
  19.             // TODO Auto-generated catch block  
  20.             e.printStackTrace();  
  21.         } catch (IllegalStateException e) {  
  22.             // TODO Auto-generated catch block  
  23.             e.printStackTrace();  
  24.         } catch (IOException e) {  
  25.             // TODO Auto-generated catch block  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29.       
  30.     public void playMusic(Uri uri) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{  
  31.         MediaPlayer mp = new MediaPlayer();  
  32.         mp.setDataSource(this, uri);  
  33.         mp.prepare();  
  34.         mp.start();  
  35.     }  
  36. }</span></span>  

 

 

 

2. 在AndroidManifest 注册TestActivity

 

Java代码
  1. <activity android:name=".TestActivity"  
  2.                   android:label="TestActivity">   
  3.             <intent-filter>   
  4.                 <action android:name="android.intent.action.GET_CONTENT" />   
  5.                  <category android:name="android.intent.category.DEFAULT" />   
  6.                  <category android:name="android.intent.category.OPENABLE" />   
  7.                  <data android:mimeType="audio/music1" />   
  8.             </intent-filter>   
  9.         </activity>  
[java]  view plain copy
  1. <span style="font-family: comic sans ms,sans-serif;"><span style="font-size: x-small;"><activity android:name=".TestActivity"  
  2.                   android:label="TestActivity">  
  3.             <intent-filter>  
  4.                 <action android:name="android.intent.action.GET_CONTENT" />  
  5.                  <category android:name="android.intent.category.DEFAULT" />  
  6.                  <category android:name="android.intent.category.OPENABLE" />  
  7.                  <data android:mimeType="audio/music1" />  
  8.             </intent-filter>  
  9.         </activity></span></span>  

 

 

 

3. 使用TestActivity

 

Java代码
  1. public void sendChooser(){   
  2.         Intent intent = new Intent(Intent.ACTION_GET_CONTENT);   
  3.            
  4.         intent.setDataAndType(Uri.parse("file:///sdcard/DCIM/cc.mp3"), "audio/music1");   
  5.   
  6.         startActivity(Intent.createChooser(intent, "Select music1 app"));   
  7.     }  
[java]  view plain copy
  1. <span style="font-family: comic sans ms,sans-serif;"><span style="font-size: x-small;">public void sendChooser(){  
  2.         Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
  3.           
  4.         intent.setDataAndType(Uri.parse("file:///sdcard/DCIM/cc.mp3"), "audio/music1");  
  5.   
  6.         startActivity(Intent.createChooser(intent, "Select music1 app"));  
  7.     }</span></span>  

 

 

4. emulator 运行截图:

 

 

此外:

   //选择图片 requestCode 返回的标识

  Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT"

  innerIntent.setType(contentType); //查看类型 String IMAGE_UNSPECIFIED = "image/*";

  Intent wrapperIntent = Intent.createChooser(innerIntent, null);

  ((Activity) context).startActivityForResult(wrapperIntent, requestCode);

 

  //视频

  Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);

  innerIntent.setType(contentType); //String VIDEO_UNSPECIFIED = "video/*";

  Intent wrapperIntent = Intent.createChooser(innerIntent, null);

  ((Activity) context).startActivityForResult(wrapperIntent, requestCode);

 

  //添加音频

  Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);

  innerIntent.setType(contentType); //String VIDEO_UNSPECIFIED = "video/*";

  Intent wrapperIntent = Intent.createChooser(innerIntent, null);

  ((Activity) context).startActivityForResult(wrapperIntent, requestCode);

 

  //录音

  Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

  intent.setType(ContentType.AUDIO_AMR); //String AUDIO_AMR = "audio/amr";

  intent.setClassName("com.android.soundrecorder",

  "com.android.soundrecorder.SoundRecorder");

  ((Activity) context).startActivityForResult(intent, requestCode);

 

  //拍摄视频

  int durationLimit = getVideoCaptureDurationLimit(); //SystemProperties.getInt("ro.media.enc.lprof.duration", 60);

  Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

  intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);

  intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, sizeLimit);

  intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, durationLimit);

  startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);

 

  //拍照 REQUEST_CODE_TAKE_PICTURE 为返回的标识

  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //"android.media.action.IMAGE_CAPTURE";

  intent.putExtra(MediaStore.EXTRA_OUTPUT, Mms.ScrapSpace.CONTENT_URI); // output,Uri.parse("content://mms/scrapSpace");

  startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);

=============================================================================================================

以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent。

  一、打开一个网页,类别是Intent.ACTION_VIEW

  Uri uri = Uri.parse(“http://blog.3gstdy.com/”);

  Intent intent = new Intent(Intent.ACTION_VIEW, uri);

  二、打开地图并定位到一个点

  Uri uri = Uri.parse(“geo:52.76,-79.0342″);

  Intent intent = new Intent(Intent.ACTION_VIEW, uri);

  三、打开拨号界面 ,类型是Intent.ACTION_DIAL

  Uri uri = Uri.parse(“tel:10086″);

  Intent intent = new Intent(Intent.ACTION_DIAL, uri);

  四、直接拨打电话,与三不同的是,这个直接拨打电话,而不是打开拨号界面

  Uri uri = Uri.parse(“tel:10086″);

  Intent intent = new Intent(Intent.ACTION_CALL, uri);

  五、卸载一个应用,Intent的类别是Intent.ACTION_DELETE

  Uri uri = Uri.fromParts(“package”, “xxx”, null);

  Intent intent = new Intent(Intent.ACTION_DELETE, uri);

  六、安装应用程序 ,Intent的类别是Intent.ACTION_PACKAGE_ADDED

  Uri uri = Uri.fromParts(“package”, “xxx”, null);

  Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, uri);

  七、播放音频文件

  Uri uri = Uri.parse(“file:///sdcard/download/everything.mp3″);

  Intent intent = new Intent(Intent.ACTION_VIEW, uri);

  intent.setType(“audio/mp3″);

  八、打开发邮件界面

  Uri uri= Uri.parse(“mailto:admin@3gstdy.com”);

  Intent intent = new Intent(Intent.ACTION_SENDTO, uri);

  九、发邮件,与八不同这里是将邮件发送出去,

  Intent intent = new Intent(Intent.ACTION_SEND);

  String[] tos = { “admin@3gstdy.com ” };

  String[] ccs = { “webmaster@3gstdy.com ” };

  intent.putExtra(Intent.EXTRA_EMAIL, tos);

  intent.putExtra(Intent.EXTRA_CC, ccs);

  intent.putExtra(Intent.EXTRA_TEXT, “I come from http://blog.3gstdy.com ”);

  intent.putExtra(Intent.EXTRA_SUBJECT, “http://blog.3gstdy.com”);intent.setType(“message/rfc882″);

  Intent.createChooser(intent, “Choose Email Client”);

  //发送带附件的邮件

  Intent intent = new Intent(Intent.ACTION_SEND);

  intent.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);

  intent.putExtra(Intent.EXTRA_STREAM, “file:///sdcard/mysong.mp3″);

  intent.setType(“audio/mp3″);

  startActivity(Intent.createChooser(intent, “Choose Email Client”));

  十、发短信

  Uri uri= Uri.parse(“tel:10086″);

  Intent intent = new Intent(Intent.ACTION_VIEW, uri);

  intent.putExtra(“sms_body”, “I come from http://blog.3gstdy.com ”);

  intent.setType(“vnd.Android -dir/mms-sms”);

  十一、直接发邮件

  Uri uri= Uri.parse(“smsto://100861″);

  Intent intent = new Intent(Intent.ACTION_SENDTO, uri);

  intent.putExtra(“sms_body”, “3g android http://blog.3gstdy.com ”);

  十二、发彩信

  Uri uri= Uri.parse(“content://media/external/images/media/23″);

  Intent intent = new Intent(Intent.ACTION_SEND);

  intent.putExtra(“sms_body”, “3g android http://blog.3gstdy.com ”);

  intent.putExtra(Intent.EXTRA_STREAM, uri);

  intent.setType(“image/png”);

  十三、# Market 相关

  1 //寻找某个应用

  Uri uri = Uri.parse(“market://search?q=pname:pkg_name”);

  Intent it = new Intent(Intent.ACTION_VIEW, uri);

  startActivity(it);

  //where pkg_name is the full package path for an application

  2 //显示某个应用的相关信息

  Uri uri = Uri.parse(“market://details?id=app_id”);

  Intent it = new Intent(Intent.ACTION_VIEW, uri);

  startActivity(it);

  //where app_id is the application ID, find the ID

  //by clicking on your application on Market home

  //page, and notice the ID from the address bar

  十四、路径规划

  Uri uri = Uri.parse(“http://maps.google .com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en”);

  Intent it = new Intent(Intent.ACTION_VIEW, uri);

  startActivity(it);

  //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456



这篇关于intent-filter中的三个子选项的使用 action----intent-filter-------------data的说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/611344

相关文章

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期