在android 5.0中从图库中select照片

我遇到了一个问题,从Android 5.0的图片库中挑选图片。 我开始意图的代码是:

private void takePictureFromGallery() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_FROM_FILE); } 

这里是onActivityResult()方法的请求代码PICK_FROM_FILE中调用的函数

 private void handleGalleryResult(Intent data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); // field declaration private String mTmpGalleryPicturePath; mTmpGalleryPicturePath = cursor.getString(columnIndex); cursor.close(); // at this point mTmpGalleryPicturePath is null ... } 

对于以前的版本比5.0这个代码总是工作,使用com.android.gallery应用程序。 Google相册是Android 5.0上的默认图库应用程序。 可能是这个问题取决于应用程序或是一个新的android操作系统发行的问题?

编辑

我了解这个问题:Google相册自动浏览云服务器上备份映像的内容。 实际上,如果我closures每个互联网连接,并select一个图像后,实际上试图实践@maveňbuild议,它不会得到从InputStream解码位图的结果。

    所以在这一点上问题成为:是否有一种方法在Android 5.0中处理Intent.ACTION_PICK行动,使系统浏览select本地设备图片库?

    Related of "在android 5.0中从图库中select照片"

    我find了解决这个问题的方法。 在这里开始从设备的图库中挑选图像的活动:

     private void takePictureFromGallery() { startActivityForResult( Intent.createChooser( new Intent(Intent.ACTION_GET_CONTENT) .setType("image/*"), "Choose an image"), PICK_FROM_FILE); } 

    这里要处理意图的结果,如本文所述,请注意getPath()函数的工作原理与Android版本不同:

     private void handleGalleryResult(Intent data) { Uri selectedImage = data.getData(); mTmpGalleryPicturePath = getPath(selectedImage); if(mTmpGalleryPicturePath!=null) ImageUtils.setPictureOnScreen(mTmpGalleryPicturePath, mImageView); else { try { InputStream is = getContentResolver().openInputStream(selectedImage); mImageView.setImageBitmap(BitmapFactory.decodeStream(is)); mTmpGalleryPicturePath = selectedImage.getPath(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @SuppressLint("NewApi") private String getPath(Uri uri) { if( uri == null ) { return null; } String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor; if(Build.VERSION.SDK_INT >19) { // Will return "image:x*" String wholeID = DocumentsContract.getDocumentId(uri); // Split at colon, use second item in the array String id = wholeID.split(":")[1]; // where id is equal to String sel = MediaStore.Images.Media._ID + "=?"; cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, sel, new String[]{ id }, null); } else { cursor = getContentResolver().query(uri, projection, null, null, null); } String path = null; try { int column_index = cursor .getColumnIndex(MediaStore.Images.Media.DATA); cursor.moveToFirst(); path = cursor.getString(column_index).toString(); cursor.close(); } catch(NullPointerException e) { } return path; } 
    • takePictureFromGallery()onActivityResult调用

    就这样!!

    尝试这个:

     //5.0 Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, CHOOSE_IMAGE_REQUEST); 

    在onActivityResult中使用以下内容:

     Uri selectedImageURI = data.getData(); input = c.getContentResolver().openInputStream(selectedImageURI); BitmapFactory.decodeStream(input , null, opts); 

    更新

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri); /** * helper to retrieve the path of an image URI */ public String getPath(Uri uri) { if( uri == null ) { return null; } String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if( cursor != null ){ int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } return uri.getPath(); } } } 

    tempPath将存储ImageSelected的path

    检查这个更多的细节