雖然 Android 開發是用實機才是王道,但有時就是想偷懶看模擬器跑的如何,這時就仍需要模擬器的環境。如果要處理照片、影片的應用時,就需要匯入一些圖片影片來測試。一開始若直接用 adb shell 或 DDMS push 資料至模擬器時,會顯示 failed to copy: Read-only file system:
$ adb push test.png /sdcard/
failed to copy 'test.png' to '/sdcard//test.png': Read-only file system
這時因為 / 目錄為 Read-Only file system,需要稍微處理一下:
$ adb shell mount -o remount rw /sdcard
接著就可以 DDMS 或 adb shell 匯入資料:
$ adb push images/ /sdcard/
push: images/1.png -> /mnt/sdcard/1.png
push: images/2.png -> /mnt/sdcard/2.png
push: images/3.png -> /mnt/sdcard/3.png
push: images/4.png -> /mnt/sdcard/4.png
push: images/5.png -> /mnt/sdcard/5.png
然而,匯入後仍無法被系統偵測,無論是寫程式還是開 Gallery app 也都一樣,但只需跑一下模擬器內建軟體 Dev Tools > Media Scanner 後,即可解決。
簡易的取出系統內所有 image 方式:
Cursor imgcursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
{ MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }, // columns
null,
null,
MediaStore.Images.Media._ID // order by
);
if( imgcursor != null ) {
int count = imgcursor.getCount();
int media_data_index = imgcursor.getColumnIndex(MediaStore.Images.Media.DATA);
int media_id_index = imgcursor.getColumnIndex(MediaStore.Images.Media._ID);
for( int i=0 ; i<count ; ++i ) {
imgcursor.moveToPosition(i);
String path = imgcursor.getString(media_data_index);
Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail( getApplicationContext().getContentResolver(), media_id_index, MediaStore.Images.Thumbnails.MICRO_KIND, null);
System.out.println("path :"+path);
}
}
用 Intent 開啟單張圖片:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Pictures"), 1);
依檔案型態開啟對應程式:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + path), "image/*");
startActivity(intent);
沒有留言:
張貼留言