我想知道是否可以启动一个Intent来使用文件浏览器(如果设备上已安装)查看目录,以便像这样打开一个文件夹:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/MyFolder");
intent.setDataAndType(uri, "MIME TYPE FOR FOLDERS");
startActivity(intent);
我想知道是否可以启动一个Intent来使用文件浏览器(如果设备上已安装)查看目录,以便像这样打开一个文件夹:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/MyFolder");
intent.setDataAndType(uri, "MIME TYPE FOR FOLDERS");
startActivity(intent);
这是一个古老的问题,但我注意到在任何答案中MimeType目录实际上都没有被正确指定。我在Google SAF(存储访问框架)的代码示例android-StorageProvider中找到了这个问题。
DocumentsContract.Document.MIME_TYPE_DIR
这是哪个字符串:
vnd.android.document/directory
所以针对最初的问题:
Uri uri = Uri.parse(getFilesDir().getPath());
int OPEN_REQUEST = 1337;
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setDataAndType(uri, DocumentsContract.Document.MIME_TYPE_DIR);
startActivityForResult(intent, OPEN_REQUEST);
但是存储访问框架将为您浏览目录。因此,您可能只需要执行以下操作:
int OPEN_REQUEST = 1337;
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, OPEN_REQUEST);
final File dir = getSaveImageDir(); final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(dir), "vnd.android.cursor.dir/image"); startActivity(intent);
- Bob LiberatoreAndExplorer具有供应商MIME类型,可将其用作文件选择器:
vnd.android.cursor.dir/lysesoft.andexplorer.director
vnd.android.cursor.dir/lysesoft.andexplorer.file
有关更多信息,请参见AndExplorer的开发人员文档。我认为其他文件浏览器也有类似的功能,但我尚未找到它们的文档。
根据一些谷歌搜索结果,字符串“inode/directory”和“x-directory/normal”似乎是Unix系统中预设的MIME类型,但我手机上没有找到任何关于它们的信息,所以我可能会先检查并提供这些类型;而寻找值不绑定到特定应用程序的“vnd.android.cursor.item/directory”则是其次选择。
我不太愿意使用应用程序特定类型。
(我刚发现ES使用“resource/folder”,这也可以是独立于应用程序的类型;可惜没有办法告诉Android这些类型都是等效的。)
Blackmoon文件浏览器根据MIME类型做出响应:
以便打开它的视图,从而显示文件夹的内容或者在文件情况下,将其父文件夹滚动显示以显示特定文件。
您可以查看Blackmoon的开发文档,其中概述了它使用的各种意图。
很遗憾,Android没有指定特定的MIME类型来查看文件/文件夹。这样,所有文件管理应用程序都将使用相同的意图,以便用户可以自由选择最适合他们的应用程序,而不是被锁定在任何特定应用程序中。
我想这就是为什么存在http://www.openintents.org/这样的网站,以便开发人员可以共享一些标准或至少发布一些标准应用程序功能。
由于目录文件似乎没有标准的 MIME 类型,因此我编写了我的文件浏览器以过滤没有 MIME 类型的意图。只需将数据设置为您文件夹的 Uri 即可。这也将意图方案设置为“file”,这是我的意图过滤器所必需的。
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/MyFolder");
intent.setData(uri);
startActivity(intent);
这个意图将启动以下应用程序:
http://play.google.com/store/apps/details?id=com.organicsystemsllc.thumbdrive