1. 程式人生 > >獲取手機相簿圖片顯示並獲取路徑

獲取手機相簿圖片顯示並獲取路徑

  1. Intent intent = new Intent();  
  2. intent.setAction(Intent.ACTION_PICK);  
  3. intent.setType("image/*");  
  4. startActivityForResult(intent, RESULT_LOAD_IMAGE);  
當我們選擇一個圖片以後,在onActivityResult中,我們用一下程式碼獲取選擇的圖片路徑:
  1. Uri uri = data.getData();  
  2. String path = uri.getPath();  
在這段程式碼中,我測試發現,在我的Nexus 4、魅族、模擬器上測試沒有什麼問題,但是在紅米,華為等手機上測試,發現得到的path這個路徑值,不是我們圖片在手機上的路徑,暫時還不明白是個什麼值,如果根據這個path去獲取圖片會得到一個null值,不知為什麼???

解決方案:在onActivityResult中,按照如下的方式,就可以在所有的手機上使用,不會出問題,親測:

  1. if (data != null) {    
  2.     Uri uri = data.getData();    
  3.     if (!TextUtils.isEmpty(uri.getAuthority())) {    
  4.         Cursor cursor = getContentResolver().query(uri,  
  5.                 new String[] { MediaStore.Images.Media.DATA },nullnull
    null);    
  6.         if (null == cursor) {    
  7.             Toast.makeText(this"圖片沒找到", Toast.LENGTH_SHORT).show();    
  8.             return;    
  9.         }    
  10.         cursor.moveToFirst();    
  11.         path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));  
  12.         cursor.close();    
  13.     } else {    
  14.         path = uri.getPath();    
  15.     }    
  16. }else{    
  17.     Toast.makeText(this"圖片沒找到", Toast.LENGTH_SHORT).show();    
  18.     return;    
  19. }   
//跳轉只有裁剪圖片
/**
 * 開啟系統相簿,並選擇圖片
 */
private int PHOTO_REQUEST_CUT = 22;
public void selectPic(){ Intent intent = new Intent("android.intent.action.PICK");intent.setType("image/*");startActivityForResult(intent, 0);}
if(requestCode == 0){
    if (data != null) {
        Uri uri = data.getData();
crop(uri);
}else if(requestCode == PHOTO_REQUEST_CUT){
    if (data != null) {
        Bitmap bitmap = data.getParcelableExtra("data");
back_image.setImageBitmap(bitmap);
}
}
private void crop(Uri uri) {
            // 裁剪圖片意圖
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪後輸出圖片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
intent.putExtra("outputFormat", "JPEG");// 圖片格式
intent.putExtra("noFaceDetection", true);// 取消人臉識別
intent.putExtra("return-data", true);
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CUT
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}