【问题标题】:Android: Getting path from mediaStore after selecting from android gallery appAndroid:从 android 图库应用程序中选择后从 mediaStore 获取路径
【发布时间】:2016-03-18 05:00:54
【问题描述】:

我试图返回存储在我的安卓手机中的真实照片路径。它适用于我的 4.4.2 手机,但使用 5.0.2 手机时,返回的路径为空

这是我从 intent.getData 作为 Uri( 内容://com.android.providers.media.documents/document/image%3A3061),

String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(GlobalApplication.getContext(), photoUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String result = cursor.getString(column_index);
    cursor.close();
    return result;

这是我启动画廊应用程序的代码:

Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),MobileConstant.newInstance().REQUEST_CODE_GALLERY);

【问题讨论】:

    标签: android media-queries android-gallery mediastore


    【解决方案1】:

    我通过使用它来工作:

    Cursor cursor = GlobalApplication.getContext().getContentResolver().query(photoUri, null, null, null, null);
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":")+ 1);
        cursor.close();
    
        cursor = GlobalApplication.getContext().getContentResolver().query(
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
        cursor.moveToFirst();
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();
    
        return path;
    

    【讨论】:

      【解决方案2】:
      //To get picture from gallery or camrea  
      if (Build.VERSION.SDK_INT < 19) {
                      Intent intent = new Intent();
                      intent.setType("image/jpeg");
                      intent.setAction(Intent.ACTION_GET_CONTENT);
                      startActivityForResult(Intent.createChooser(intent, "Complete action using"), 200);
                  } else {
                      Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                      intent.addCategory(Intent.CATEGORY_OPENABLE);
                      intent.setType("image/jpeg");
                      startActivityForResult(intent, 300);
                  }
      
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
      //To get result
      if (requestCode == 200) {
              Uri selectedImage = data.getData();
              Log.d("Uri", selectedImage.toString());
              startCropImage(selectedImage);
          }
          else if (requestCode == 300) {
              Uri originalUri = data.getData();
              final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
              //noinspection ResourceType
              getContentResolver().takePersistableUriPermission(originalUri, takeFlags);
              Log.d("Uri", originalUri.toString());
              startCropImage(originalUri);
          }
      }
      

      【讨论】:

        【解决方案3】:

        从图库中挑选图片的意图

        Intent intent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/*");
        startActivityForResult(intent, reqCode);  
        

        在 onActivityResult 方法中

         @Override
                public void onActivityResult(int requestCode, int resultCode, Intent data) {
                    // TODO Auto-generated method stub
                    super.onActivityResult(requestCode, resultCode, data);
        
                    try {
                        if (resultCode == Activity.RESULT_OK) {
                            if (requestCode == reqCode) {
                                if (data != null) {
                                  String realPath=getRealPathFromURI(data.getData());
                                }
                            }
                        }
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
        
        
        private String getRealPathFromURI(Uri contentUri) {
                Cursor cursor = null;
                try {
                    String[] proj = { MediaStore.Images.Media.DATA };
                    cursor = getActivity().getContentResolver().query(contentUri, proj,
                            null, null, null);
                    int column_index = cursor
                            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    cursor.moveToFirst();
                    return cursor.getString(column_index);
                } finally {
                    if (cursor != null) {
                        cursor.close();
                    }
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-29
          • 2013-12-29
          • 2014-03-27
          • 2020-09-23
          • 2015-12-19
          • 2020-11-14
          相关资源
          最近更新 更多