• android脚步---Itent.ACTION_PICK ,startActivityForResult


    public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            switch (v.getId()) {
            case R.id.btFirst:
    
                startActivityForResult(intent, 1);
            
                break;
            case R.id.btSecond:
    
                startActivityForResult(intent, 2);
    
                break;
            case R.id.btDetect:
                final String firstPath = etFirst.getText().toString();
                final String secondPath = etSecond.getText().toString();

    然后重写方法,对应:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            if (data != null) {
                Cursor cursor = getContentResolver().query(data.getData(), null,
                        null, null, null);
                cursor.moveToFirst();
                int idx = cursor.getColumnIndex(ImageColumns.DATA);
                String fileSrc = cursor.getString(idx);
                if (requestCode == 1) {
                    etFirst.setText(fileSrc);
    
                } else if (requestCode == 2) {
                    etSecond.setText(fileSrc);
    
                }
                cursor.close();
    
            }
        }

    Cursor cursor得到数据库指针 cursor,指向data.getData,像是一条条存储,cursor.moveToFirst();指向存储的第一条,int idx = cursor.getColumnIndex(ImageColumns.DATA);idx相当一个索引,指向(ImageColumns.DATA,

    requestCode很重要,startActivityForResult(Intent intent, int requestCode)中startActivityForResult中两个参数对应的requestCode,

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

    代码中:Intent intent = new Intent(Intent.ACTION_PICK);

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

         其中cursor是数据库的知识,相当于数据库中的指针,query得到contactdata,
    例如

    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);  
    2. intent.setType("audio/*");  
    3. 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  播放目标

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

    2. 在AndroidManifest 注册TestActivity

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

    3. 使用TestActivity

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

    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);
  • 相关阅读:
    1.linux6 x86-64 RPM包安装mysql5.7.20
    zepto中的animate
    java开发环境配置
    sql按相似度模糊查询实例
    下载方法收集
    myeclipseBlue6.5破解,运行即可得到key
    浮点数特点
    java进制之间的转换
    java小算法
    Java中的DateFormat用法
  • 原文地址:https://www.cnblogs.com/Anita9002/p/4123761.html
Copyright © 2020-2023  润新知