gpt4 book ai didi

android - 从 Uri 获取真实路径 - DATA 在 android Q 中已弃用

转载 作者:行者123 更新时间:2023-12-03 13:25:15 34 4
gpt4 key购买 nike

我成功地实现了一种通过 Uri 从图库中检索图像真实路径的方法。从 ACTION_PICK 返回 Intent 。这是一个示例:

// getRealPathFromURI(intent.getData());

private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file path
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}

就像这样 answer .

最近更新了 compileSdkVersion29显然是 DATA大家使用的属性是 deprecated .
在官方文档中,他们建议使用 FileDescriptor相反,问题是我不知 Prop 体如何。
我唯一找到的是这个 question .虽然没有找到正确的答案。

请使用建议的方式或任何其他方式帮助我解决该弃用问题。

谢谢你。

更新:

关注 @CommonsWareanswer并将返回的 Uri(用户选择的图像)复制到本地目录,使用 context.getContentResolver.openInputStream(Uri) .

甚至尝试从 Google Drive 中检索文件 - 并且成功了。唯一的问题是花费了很长时间(5MB 文件大约需要 20 秒)。

作为奖励,我被清除删除外部存储权限,使用应用程序的本地目录不需要该权限。

我没有更多的外部路径!

最佳答案

一周前我也提出了这个问题。

我的解决方案是创建一个 InputStream从 URI 中创建一个 OutputStream通过复制输入流的内容。

注:您可以使用异步调用来调用此方法,因为复制非常大的文件可能会有一些延迟,并且您不想阻塞您的 UI

@Nullable
public static String createCopyAndReturnRealPath(
@NonNull Context context, @NonNull Uri uri) {
final ContentResolver contentResolver = context.getContentResolver();
if (contentResolver == null)
return null;

// Create file path inside app's data dir
String filePath = context.getApplicationInfo().dataDir + File.separator
+ System.currentTimeMillis();

File file = new File(filePath);
try {
InputStream inputStream = contentResolver.openInputStream(uri);
if (inputStream == null)
return null;

OutputStream outputStream = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0)
outputStream.write(buf, 0, len);

outputStream.close();
inputStream.close();
} catch (IOException ignore) {
return null;
}

return file.getAbsolutePath();
}

关于android - 从 Uri 获取真实路径 - DATA 在 android Q 中已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57093479/

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