zoukankan      html  css  js  c++  java
  • android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用

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

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

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

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

     
  • 相关阅读:
    leetcode-----75. 颜色分类
    《面向机器智能的TensorFlow实践》_段菲学习资料
    事务及其ACID特性
    greenplum基本使用操作
    通过java api统计hive库下的所有表的文件个数、文件大小
    深度学习原理与TensorFlow实践_喻俨资料整理
    采集数据到HDFS
    《深入理解TensorFlow架构设计与实现原理》_彭靖田学习材料整理
    Too many open files
    子元素高度100%
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4169736.html
Copyright © 2011-2022 走看看