java - 尝试使用 ACTION_VIEW 打开文件时在 android 11 上找不到媒体
问题描述
我有一种方法用于从我的应用程序中打开文件,并且在 android 10 之前一切正常,但是当我尝试使用谷歌照片在 android 11 中打开文件时,它不会打开它并显示 Media not found toast。我正在尝试在任何外部应用程序中打开。
这是我正在使用的方法:
private void openFile(String url) throws IOException {
// Create URI
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
Uri uri = Uri.parse(url);
Intent intent = null;
// Check what kind of file you are trying to open, by comparing the url with extensions.
// When the if condition is matched, plugin sets the correct intent (mime) type,
// so Android knew what application to use to open the file
intent = new Intent(Intent.ACTION_VIEW);
if (url.contains(".doc") || url.contains(".docx")) {
// Word document
intent.setDataAndType(uri, "application/msword");
} else if(url.contains(".pdf")) {
// PDF file
intent.setDataAndType(uri, "application/pdf");
} else if(url.contains(".ppt") || url.contains(".pptx")) {
// Powerpoint file
intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
} else if(url.contains(".xls") || url.contains(".xlsx")) {
// Excel file
intent.setDataAndType(uri, "application/vnd.ms-excel");
} else if(url.contains(".rtf")) {
// RTF file
intent.setDataAndType(uri, "application/rtf");
} else if(url.contains(".wav")) {
// WAV audio file
intent.setDataAndType(uri, "audio/x-wav");
} else if(url.contains(".gif")) {
// GIF file
intent.setDataAndType(uri, "image/gif");
} else if(url.contains(".jpg") || url.contains(".jpeg")) {
// JPG file
intent.setDataAndType(uri, "image/jpeg");
} else if(url.contains(".png")) {
// PNG file
intent.setDataAndType(uri, "image/png");
} else if(url.contains(".txt")) {
// Text file
intent.setDataAndType(uri, "text/plain");
} else if(url.contains(".mpg") || url.contains(".mpeg") || url.contains(".mpe") || url.contains(".mp4") || url.contains(".avi")) {
// Video files
intent.setDataAndType(uri, "video/*");
}
//if you want you can also define the intent type for any other file
//additionally use else clause below, to manage other unknown extensions
//in this case, Android will show all applications installed on the device
//so you can choose which application to use
else {
intent.setDataAndType(uri, "*/*");
}
this.cordova.getActivity().startActivity(intent);
}
解决方案
推荐阅读
- python - GPU 上的 Pytorch 转换,在大输入数据上是否值得?
- jupyter-notebook - 键盘快捷键在我的 Jupyter Notebook 中不起作用!(b键,m键...)
- javascript - 在节点 js 项目中渲染角度 index.html 在控制台中引发错误
- c++ - SDL2 无法从矢量渲染实体
- mysql - 使用其他 2 填充表并检查另一个表中的值
- javascript - 应用 Laravel 8 + Livewire 动态检查值到脚本中
- laravel - 包文件管理器github
- html - 如何将 HTML jpeg 附加到电子邮件?
- fluid-framework - SharedMap 中的 413(有效负载过大)错误
- kotlin - 同一个协程上的队列操作