android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用

转载 2012年03月24日 23:10:29

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

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

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

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"));  
  1. <SPAN style="FONT-FAMILY: comic sans ms,sans-serif"><SPAN style="FONT-SIZE: x-small">Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/*"); startActivity(Intent.createChooser(intent, "Select music"));</SPAN></SPAN>  
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/*"); startActivity(Intent.createChooser(intent, "Select music"));

 

 

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

 

 

 

 

 

 

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

 

 

 

[代码]

 

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. }  
  1. <SPAN style="FONT-FAMILY: comic sans ms,sans-serif"><SPAN style="FONT-SIZE: x-small">public class TestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.setTitle("TestActivity"); Intent i = this.getIntent(); Uri u = i.getData(); try { playMusic(u); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void playMusic(Uri uri) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{ MediaPlayer mp = new MediaPlayer(); mp.setDataSource(this, uri); mp.prepare(); mp.start(); } }</SPAN></SPAN>  
public class TestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.setTitle("TestActivity"); Intent i = this.getIntent(); Uri u = i.getData(); try { playMusic(u); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void playMusic(Uri uri) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{ MediaPlayer mp = new MediaPlayer(); mp.setDataSource(this, uri); mp.prepare(); mp.start(); } }

 

 

 

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>  
  1. <SPAN style="FONT-FAMILY: comic sans ms,sans-serif"><SPAN style="FONT-SIZE: x-small"><activity android:name=".TestActivity" android:label="TestActivity"> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.OPENABLE" /> <data android:mimeType="audio/music1" /> </intent-filter> </activity></SPAN></SPAN>  
<activity android:name=".TestActivity" android:label="TestActivity"> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.OPENABLE" /> <data android:mimeType="audio/music1" /> </intent-filter> </activity>

 

 

 

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.     }  
  1. <SPAN style="FONT-FAMILY: comic sans ms,sans-serif"><SPAN style="FONT-SIZE: x-small">public void sendChooser(){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setDataAndType(Uri.parse("file:///sdcard/DCIM/cc.mp3"), "audio/music1"); startActivity(Intent.createChooser(intent, "Select music1 app")); }</SPAN></SPAN>  
public void sendChooser(){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setDataAndType(Uri.parse("file:///sdcard/DCIM/cc.mp3"), "audio/music1"); startActivity(Intent.createChooser(intent, "Select music1 app")); }

 

 

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);

相关文章推荐

android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用

你是不是很多时候,想从弹出的电话本姓名列表中中查找到某个人,然后再获取该人的详细信息呢?你是不是想选择从弹出的列表中选择一张图片,然后将其进行进一步的操作呢?如果,你想,那你是不是很像知道,我们应该怎...

Android获取本地图片之ACTION_GET_CONTENT与ACTION_PICK区别

我们都知道下面两种方法都可以打开Android本地图库: ACTION_GET_CONTENT Intent intent = new Intent(Intent.ACTION_GET...

Android Intent.ACTION_CHOOSER 与 Intent.ACTION_PICK_ACTIVITY

1.Intent.ACTION_CHOOSER = “android.intent.action.CHOOSER” 其作用是显示一个Activity选择器。Intent提供了一个静态的createCh...

android.intent.action.TIME_TICK

  • 2013年08月01日 08:31
  • 1.15MB
  • 下载

Android 广播大全 Intent Action 事件.

  • 2012年03月19日 21:27
  • 17KB
  • 下载

【Android】广播大全 Intent Action 事件

Intent.ACTION_AIRPLANE_MODE_CHANGED; //关闭或打开飞行模式时的广播   Intent.ACTION_BATTERY_CHANGED; //...
  • Etzmico
  • Etzmico
  • 2012年03月07日 10:10
  • 5611

android 常用的intent action整理

  • 2015年04月16日 23:23
  • 247KB
  • 下载

android Intent匹配,自定义action data category

官网对Intent的action、data和category的说明 public Intent setAction (String action) Added in API level 1 Set...

【Android】Intent Action 大全

 1.Intent的用法: (1)Action跳转 1、 使用Action跳转,当程序AndroidManifest.xml中某一个 Activity的IntentFilter定义了包含Ac...

Android 常用的intent Action整理

Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用
举报原因:
原因补充:

(最多只允许输入30个字)