Oreo DocumentsContract.getDocumentId(uri) 返回 path 而不是 Long



我正在尝试获取存储在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.

有什么想法吗?谢谢。

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

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

使用这个

String id = DocumentsContract.getDocumentId(uri);
id = id.replaceAll("\D+","");

相关内容

  • 没有找到相关文章

最新更新