Android 從手機相簿獲取圖片 uri 路徑 從相機獲取照片

秋天的春發表於2020-12-09

Android 從手機相簿獲取圖片 uri 路徑 從相機獲取照片

 

從手機相簿獲取圖片

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(IMAGE_TYPE);
startActivityForResult(intent,REQUEST_IMAGE_CAPTURE);

 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if (resultCode != RESULT_OK) {        //此處的 RESULT_OK 是系統自定義得一個常量
        Log.e(TAG,"ActivityResult resultCode error");
        return;
    }

    Bitmap bm = null;

    //外界的程式訪問ContentProvider所提供資料 可以通過ContentResolver介面
    ContentResolver resolver = getContentResolver();

    //此處的用於判斷接收的Activity是不是你想要的那個
    if (requestCode == IMAGE_CODE) {
        try {
            Uri originalUri = data.getData();        //獲得圖片的uri 

            bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);        //顯得到bitmap圖片

            //獲取圖片的路徑:

            String[] proj = {MediaStore.Images.Media.DATA};

            //好像是android多媒體資料庫的封裝介面,具體的看Android文件
            Cursor cursor = managedQuery(originalUri, proj, null, null, null); 
            //按我個人理解 這個是獲得使用者選擇的圖片的索引值
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            //將游標移至開頭 ,這個很重要,不小心很容易引起越界
            cursor.moveToFirst();
            //最後根據索引值獲取圖片路徑
            String path = cursor.getString(column_index);
        }catch (IOException e) {
            Log.e(TAG,e.toString()); 
        }
    }
}

 

從相機獲取照片

public final static int REQUEST_IMAGE_CAPTURE = 1;

//start
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);

//receive
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != RESULT_OK) {
      Log.d(TAG, "canceled or other exception!");
      return;
    }

    if (requestCode == REQUEST_IMAGE_CAPTURE) {
      Log.d(TAG, "REQUEST_IMAGE_CAPTURE");
      Bitmap bitmap;
      try {
        bitmap = data.getExtras().getParcelable("data"); 
        //TODO:do something with bitmap, Do NOT forget call Bitmap.recycler();
      } catch (ClassCastException e){
           //do something with exceptions
        e.printStackTrace();
      } 
    }

  }

相關文章