【发布时间】:2018-12-10 17:03:50
【问题描述】:
我正在尝试获取存储在 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' Exception.
有什么想法吗?谢谢。
【问题讨论】:
-
尝试在转换为 long 之前添加这一行:
str = str.replaceAll("[^\\d.]", "");这样在您的字符串包含字母或符号的情况下不会有任何混淆。 -
你的问题没有意义。如果您有类似
raw:/storage/emulated/0/Download/my_file.pdf的内容,则路径为/storage/emulated/0/Download/my_file.pdf。你在追求什么? -
这对我来说很有意义。在
Android 8之前,变量id包含一个Long值,因此我可以使用有效路径准备contentUri。从Android 8开始,变量id包含在Android文件系统中找不到的无效路径。
标签: android file path filesystems android-8.1-oreo