gpt4 book ai didi

android - Image Picker Intent - 在线存储照片的空路径

转载 作者:行者123 更新时间:2023-11-29 23:08:21 24 4
gpt4 key购买 nike

我正在使用图像选择器 Intent ,以允许用户从他们的图库中选择图像,我得到它的路径,然后将它传递给第三个库。

它在大多数情况下工作正常,但如果我从 Google Photos(在线存储的图像)中选取一张图片,我会得到一个 null 路径,尽管我得到了有效的 URI工作图像和非工作图像。

这是我的 Intent 调用:

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);

}

下面是工作和不工作图像的日志:

工作图像:

file uri = content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F105681/ORIGINAL/NONE/187859359

file cursor = android.content.ContentResolver$CursorWrapperInner@8953964

file columnIndex = 0

file photo path = /storage/emulated/0/DCIM/Camera/IMG_20190523_184830.jpg

无效图像:

file uri = content://com.google.android.apps.photos.contentprovider/0/1/mediakey%3A%2Flocal%253A4574915c-b4ac-40af-bc08-b1004670cab2/ORIGINAL/NONE/477302338

file cursor = android.content.ContentResolver$CursorWrapperInner@59448a4

file columnIndex = 0

file photo path = null

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

最佳答案

您问题中的技术(至少)存在三个问题:

  • 并非每个 MediaStore 条目都具有 DATA 的值,如您所见

  • 并非每个非null DATA 值都表示您可以访问的文件系统路径,因为 MediaStore 可以获取内容你不能

  • DATA 列在 Android Q 及更高版本上不可用

在您的例子中,uCrop 库接受一个 Uri。编写良好的 Android 库知道如何处理 Uri,因此您只需将 Uri 交给库,它就会从那里获取它。

关于android - Image Picker Intent - 在线存储照片的空路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com