標籤: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屬性來判斷具體調用哪個程式的。
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.setType("audio/*");
- startActivity(Intent.createChooser(intent, "Select music"));
[java] view plaincopyprint?
- <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 播放目標
<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