作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试获取存储在 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/
我正在尝试获取存储在 Android 文件系统中的文件的真实路径(我正在使用 Android 8.1 的模拟器上进行测试) 这是我的代码: final String id = DocumentsCon
我是一名优秀的程序员,十分优秀!