ACTION_GET_CONTENT意图不显示外部存储
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACTION_GET_CONTENT意图不显示外部存储相关的知识,希望对你有一定的参考价值。
我正在为我的android应用实现导入功能。我想让用户从他们设备上的外部存储器(确切地说是下载目录)和其他在线文件存储(如DropBox和Google Drive)中选择要导入的文件。
我实现了它并在模拟器和两个Android设备上测试它。当我在模拟器Android版6.0上测试时,因为它没有安装DropBox和GoogleDrive,我看到了我所期待的,它能够从下载目录中选择一个文件:
当我在谷歌Pixel手机,Android版本7.1.2上进行测试时,一切都按预期工作。我可以从下载目录,Google云端硬盘以及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);
请让我知道我可以做些什么来解决这个问题。谢谢!
我最终使用了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的外部存储中选择,也请告诉我。谢谢!
要使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);
}
以上是关于ACTION_GET_CONTENT意图不显示外部存储的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何在 ACTION_GET_CONTENT 中设置初始目录