android腳步---Itent.ACTION_PICK ,startActivityForResult

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   color   os   使用   

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 PickerIntent 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"));  
[java] view plaincopyprint?
  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);

 

 

android腳步---Itent.ACTION_PICK ,startActivityForResult

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.