gpt4 book ai didi

android - Oreo DocumentsContract.getDocumentId(uri) 返回路径而不是 Long

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:20 27 4
gpt4 key购买 nike

我正在尝试获取存储在 Android 文件系统中的文件的真实路径(我正在使用 Android 8.1 的模拟器上进行测试)

这是我的代码:

final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);

对于 Android 8.0 的早期版本,变量 id 包含一个 long 值,因此下一行按预期工作。

Android 8 上,变量 id 包含这样的路径 raw:/storage/emulated/0/Download/my_file.pdf,所以转换 Long.valueOf(id)) 抛出一个 'java.lang.NumberFormatException' 异常。

有什么想法吗?谢谢。

最佳答案

通过执行以下操作是否解决了同样的问题。

final String id = DocumentsContract.getDocumentId(uri);
if (!TextUtils.isEmpty(id)) {
if (id.startsWith("raw:")) {
return id.replaceFirst("raw:", "");
}
try {
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
} catch (NumberFormatException e) {
return null;
}
}

在评论中找到了解决方案 https://github.com/Yalantis/uCrop/issues/318

关于android - Oreo DocumentsContract.getDocumentId(uri) 返回路径而不是 Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136671/

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