ACTION_GET_CONTENT意图不显示外部存储

时间:2017-05-19 01:02:45

标签: android android-intent android-file android-external-storage android-storage

我正在为我的Android应用实施导入功能。我想让用户从他们设备上的外部存储(准确的下载目录)和其他在线文件存储(如DropBox和Google Drive)中选择要导入的文件。

我实现了它,并在模拟器和两个Android设备上进行了测试。 当我在模拟器Android版6.0上进行测试时,因为它没有安装DropBox和GoogleDrive,我看到了我所期待的,它能够从Downloads目录中选择一个文件: enter image description here

当我在Google Pixel手机Android版7.1.2上进行测试时,一切都按照我的预期运行。我可以从下载目录,Google云端硬盘和DropBox中选择一个文件: enter image description here

然而,当我在三星Galaxy 4设备Android版5.0.1上进行测试时,我可以从Google Drive和Dropbox中选择一个文件,但是我没有从中选择文件的选项我的下载目录: enter image description here

这是我选择文件的代码:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, GET_FILE_RESULT_CODE);

请让我知道如何解决此问题。谢谢!

2 个答案:

答案 0 :(得分:2)

我最终使用了ACTION_OPEN_DOCUMENT来完成这个技巧。现在我也可以从Android 5.0.1的外部存储中选择文件。

但是,ACTION_OPEN_DOCUMENT仅支持API 19及更高版本。

所以这就是我所做的:

if (Build.VERSION.SDK_INT >= 19) {
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                intent.setType("text/*");
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                startActivityForResult(intent, GET_FILE_RESULT_CODE);
            }
            else {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("text/*");
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                startActivityForResult(intent, GET_FILE_RESULT_CODE);
            }

希望这可以帮助遇到同样问题的人。如果有人弄清楚为什么我无法从Android 5.0.1的外部存储中选择ACTION_GET_CONTENT,请让我知道。谢谢!

答案 1 :(得分:1)

要使DocumentsActivity与Android版本> = KITKAT上的其他内容提供商(如Dropbox和ASTRO文件管理器)一起显示,您需要始终致电

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE)

要设置相关的MIME类型,您必须使用字符串名称putExtra()和MIME类型的数组调用Intent.EXTRA_MIME_TYPES。另一方面,对于KITKAT之前的Android版本,您需要在调用setType()时直接定义MIME类型。

我在官方文档中找不到任何相关内容,但我已经在JELLY_BEAN和KITKAT上进行了测试,但它确实有效。

总之,请尝试按以下方式更改代码:

if (Build.VERSION.SDK_INT >= 19) {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[]{"text/*"});   
    startActivityForResult(intent, GET_FILE_RESULT_CODE);
}
else {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("text/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, GET_FILE_RESULT_CODE);
}