在Android中,可以使用ACTION_OPEN_DOCUMENT
意图打开本机文件选择器并选择例如.mp4
文件。这是通过使用以下代码将mime类型设置为video/mp4
来实现的:
public static void pickFile(Context mContext, int REQUEST_CODE) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("video/mp4");
((Activity) mContext).startActivityForResult(intent, REQUEST_CODE);
}
在我的项目中,我想选择一个自定义扩展名文件,它的mime类型在android的MimeTypeMap中不为人所知,比如.qgs或.dcm文件。
为了解决这一问题,我看到了两种我们迄今未能实现的可能性:
ACTION_OPEN_DOCUMENT
意图中的扩展过滤ACTION_OPEN_DOCUMENT
意图一起使用。是这些选项中的一种,如何实现?,还是没有编写自己的文件选择器而错过的其他方法?
发布于 2018-08-25 07:03:56
您可以尝试创建一个自定义文件选择器,并传递挂载存储点,并递归地迭代所有文件类型:
public void scanFiles(File file) {
File[] fileArray = file.listFiles();
for (File f : fileArray){
if (f.isDirectory())
scanFiles(f);
if (f.isFile() && (f.getpath().endswith("..qgs") || //any extensions)) {
//Add to your list
}
}
}
并使用和挂载命令调用android中所有挂载点的扫描文件,您可以添加希望支持的所有挂载点的检查。
发布于 2018-08-26 10:57:18
可以使用ACTION_OPEN_DOCUMENT意图打开本机文件选择器。
那不是“文件选择器”。没有要求设备上的每个DocumentsProvider
都提供恰好是文件的文档。
我想选择一个自定义扩展名文件,它的mime类型在android的MimeTypeMap中是未知的,比如.qgs或.dcm文件
不要求设备上的每个DocumentsProvider
都使用文件名为其文件的文档。您看到的名称是“显示名称”,而对于某些提供程序来说,它们将是文件名,而对于其他提供程序,它们可以是提供程序想要的任何内容。
这些选项中的任何一个都可行吗?
不是的。
或者,在没有编写自己的文件选择程序的情况下,还有其他我错过的方法吗?
如果您只需要文件,就会有大量的库中现有的文件选择器实现。当您想要处理所有可能的文档源(可移动存储、云提供程序等)时,ACTION_OPEN_DOCUMENT
是存在的,而不仅仅是文件。
https://stackoverflow.com/questions/34283487
复制相似问题