android - 在 Android 11 中,我无法从文档选项中获取文件路径
问题描述
检查图像以获得更多理解并提前致谢。在此屏幕截图中,所有选项都很好,但我不想在此处显示文档选项,但还需要选择一个文档。如果没有任何方法可以隐藏该选项,则需要帮助来获取文件的路径
if (isMediaDocument(uri)) {
Log.e("URI", "" + uri);
final String docId = DocumentsContract.getDocumentId(uri);
Log.e("docId", "" + docId);
final String[] split = docId.split(":");
final String type = split[0];
Log.e("TYPE", "" + type);
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
} /*else if ("document".equals(type)) {
contentUri = uri;
}*/
selection = "_id=?";
selectionArgs = new String[]{split[1]};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
if (isGoogleDriveUri(uri)) {
return getDriveFilePath(context, uri);
}
if (isWhatsAppFile(uri)) {
return getFilePathForWhatsApp(context, uri);
}
if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
}
解决方案
您不能将该选项灰显。
即使您设法实现您getRealPathForUri()
的文件系统路径,您的应用程序也不会在 Android 11+ 设备上具有读写访问权限。
所以你想要的没有意义。
直接使用uri。
现在每个人都这样做。
推荐阅读
- mysql - 安装 FireFly III 在 kubernetes 中部署 mysql 时出错
- python - 下面的函数不会从推文中删除 RT 标签。我想从推文中删除“b”和“RT”。任何帮助将不胜感激
- sed - 使用 SED 删除给定两个模式之间的字符串,不包括匹配模式
- async-await - ServiceStack:“HostContext.AppHost.ExecuteMessage”的异步版本?
- java - 使用 Apache Ignite 重新部署 JBoss WAR 时,无法编组自定义事件:StartRoutineDiscoveryMessage
- python - 使用递归 bsearch 在列表中查找最大值的时间复杂度
- javascript - D3.js 放大面积图,如果 y 域取负值,则行为怪异
- kubectl - 使用 kubectl 重启 helm pod
- python - 正确解释 statsmodels.tsa.ar_models.ar_select_order 函数数组以确定最佳滞后
- javascript - Angular 8 Rxjs distinctUntilChanged 运算符