我正在使用图像拾取器的意图,允许用户从其画廊中选择图像,我得到它的路径,然后将其传递到第三库。
在大多数情况下都可以正常工作,但是如果我从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
交给库,然后将其从那里拿走。