【问题标题】:ACTION_GET_CONTENT Intent not showing external storageACTION_GET_CONTENT Intent 不显示外部存储
【发布时间】:2017-05-19 01:02:44
【问题描述】:

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

我在一个模拟器和两个安卓设备上实现并测试了它。 当我在模拟器上测试它时,Android 版本 6.0,因为它没有安装 DropBox 和 GoogleDrive,我看到了我所期望的,它能够从下载目录中选择一个文件:

当我在 Android 版本 7.1.2 的 Google Pixel 手机上对其进行测试时,一切正常。我可以从下载目录、Google Drive 和 DropBox 中选择一个文件:

但是,当我在三星 Galaxy 4 设备(Android 版本 5.0.1)上对其进行测试时,我能够从 Google Drive 和 Dropbox 中选择一个文件,但我无法从其中选择一个文件我的下载目录:

这是我选择文件的代码:

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

请告诉我我能做些什么来解决这个问题。谢谢!

【问题讨论】:

  • "*/*"............ 或者。先建立下载目录?最后一个缺少内部存储和最近的。还有更多。

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


【解决方案1】:

我最终使用了 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);
            }

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

【讨论】:

  • 当我在 KITKAT 上运行它时,DocumentsActivity UI 确实出现了,但是 Dropbox 和其他相关的内容提供者不见了。当调用ACTION_GET_CONTENT 时,它们确实出现在 DocumentsActivity UI 上,但仅当我将 MIME 类型设置为“*/*”时。请参阅下面我的帖子以解决此问题。
【解决方案2】:

要让 DocumentsActivity 与其他内容提供程序(例如 Android 版本上的 Dropbox 和 ASTRO 文件管理器)一起显示 >= KITKAT,您需要始终调用

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

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

我在官方文档中找不到任何关于此的信息,但我已经在 J​​ELLY_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);
}

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 2015-02-27
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多