图像选择器意图 - 在线存储照片的无效路径



我正在使用图像拾取器的意图,允许用户从其画廊中选择图像,我得到它的路径,然后将其传递到第三库。

在大多数情况下都可以正常工作,但是如果我从Google照片中拾取图像(在线存储的图像(,我会得到null路径,尽管我对这两个工作都有有效的URI,并且不工作图像。

这是我的意图:

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RESULT_LOAD_IMAGE);

这是OnActivityResult:

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
            Uri uri = data.getData();
            Log.e(getClass().getName(),"file uri = " + uri);
            String[] projection = {MediaStore.Images.Media.DATA};
            Cursor cursor = getActivity().getContentResolver().query(uri, projection,
                    null, null, null);
            if(cursor == null) return;
            Log.e(getClass().getName(),"file cursor = " + cursor);

            int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            Log.e(getClass().getName(),"file columnIndex = " + columnIndex);
            cursor.moveToFirst();

            // The crash happens here
            String photoPath = cursor.getString(columnIndex);
            Log.e(getClass().getName(),"file photo path = " + photoPath);
            cursor.close();
                cropImage(photoPath);
}

这是用于工作和不工作图像的日志:

工作图像:

>

文件光标= android.content.contentresolver$ cursorwrapperinner@8953964

文件columnIndex = 0

文件照片路径=/storage/0/dcim/camera/img_20190523_184830.jpg

不工作图像:

文件uri =

文件光标= android.content.contentresolver$ cursorwrapperinner@59448a4

文件columnIndex = 0

文件照片路径= null

如果没有办法避免该错误,是否有办法隐藏在网上存储并仅显示本地图片的照片?

您问题中的技术(至少(有三个问题:

  • 并非每个MediaStore输入都有DATA的值,因为您看到的

  • 并非每个非null DATA值代表您可以访问的文件系统路径,因为MediaStore可以到达您不能

  • 的内容
  • DATA列在Android Q和更高

  • 上不可用

在您的情况下,UCROP库接受Uri。写得很好的Android库知道如何处理Uri,因此您可以将Uri交给库,然后将其从那里拿走。

最新更新