2015-04-01 80 views
3

我使用的標準android pick images from gallery從手機中挑選圖像的方式..我的同樣的代碼在除android 5.0及以上的所有android上完全正常工作。從圖庫中挑選圖像android 5.1

我做了一些調試和問題似乎是以下:

public String getPath (Uri uri) { 

    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 

    cursor.moveToFirst(); 
    ImagePath= cursor.getString(column_index) ; 

    System.out.println("HERE" + ImagePath); // returns null 
    return cursor.getString(column_index); 
} 

我沒有返回null ImagePath的..這是哪裏的問題。它沒有任何其他Android返回空開。prinln從5.0+ ..我如何得到這個工作?

+0

我也注意到了這一點。看來Android 5.0打破了數據列。這將是一個很好的答案,這是一個真正的解決方案.... – James 2015-04-28 11:16:16

回答

0

嘗試:

String imagePath = cursor.getString(cursor.getColumnIndex(projection[0])); 
0

您應該使用startActivityForResultonActivityResult。 技巧:

Intent pickPicIntent = new Intent(); 
    // pickPicIntent.setDataAndType(
    // MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); 
    pickPicIntent.setType("image/*"); 
    pickPicIntent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(pickPicIntent, CODE_PICK_PICTURE); 

然後:

Bundle extras = data.getExtras(); 
    if (extras != null) { 
     Bitmap photo = extras.getParcelable("data"); 
     // civAvatar.setImageBitmap(photo); 
     FileOutputStream fos = null; 
     try { 
      // Store Bitmap into a File 
      fos = new FileOutputStream(AVATAR_FILE); 
      photo.compress(Bitmap.CompressFormat.PNG, 100, fos); 
      AVATAR_FILE_TMP.deleteOnExit(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } finally { 
      IoUtils.closeSilently(fos); 
      finish(); 
     } 
    } 

希望你啓發。

0

也許你可能會對RxPaparazzo感興趣。該庫支持API 24(安卓7),並允許您從相機,畫廊,文件系統,甚至遠程圖像(例如,從谷歌的照片或谷歌驅動器)拍攝圖像

用法是這樣的:

RxPaparazzo.takeImage(activityOrFragment) 
    .usingCamera() // or .usingGallery() 
    .subscribe(response -> { 
     if (response.resultCode() != RESULT_OK) { 
      response.targetUI().showUserCanceled(); 
      return; 
     } 

     response.targetUI().loadImage(response.data()); 
    }); 
相關問題