ACTION_GET_CONTENT Intent 不显示外部存储
ACTION_GET_CONTENT Intent not showing external storage
我正在为我的 Android 应用实施导入功能。我想让用户 select 他们想要从设备上的外部存储(确切地说是下载目录)和其他在线文件存储(例如 DropBox 和 Google Drive)导入的文件。
我在模拟器和两个 android 设备上实现并测试了它。
当我在模拟器 Android 版本 6.0 上测试它时,由于它没有安装 DropBox 和 GoogleDrive,我看到了我所期待的,它能够 select 下载目录中的一个文件:
当我在 Google Pixel phone、Android 版本 7.1.2 上测试它时,一切都按我预期的那样工作。我可以从下载目录、Google Drive 以及 DropBox 中选择一个文件:
但是,当我在 Samsung Galaxy 4 设备 Android 版本 5.0.1 上对其进行测试时,我能够 select 来自 Google Drive 和 Dropbox 的文件,但我无法从我的下载目录中选择 select 文件:
这是我 select 创建文件的代码:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, GET_FILE_RESULT_CODE);
请告诉我如何解决此问题。谢谢!
我最终使用 ACTION_OPEN_DOCUMENT 成功了。现在我也可以从外部存储 select 文件 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 到 select,也请告诉我。谢谢!
要使 DocumentsActivity 与其他内容提供程序(例如 Dropbox 和 ASTRO 文件管理器)一起出现在 Android 版本 >= 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类型
我在官方文档中找不到任何关于此的信息,但我已经在 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);
}
我正在为我的 Android 应用实施导入功能。我想让用户 select 他们想要从设备上的外部存储(确切地说是下载目录)和其他在线文件存储(例如 DropBox 和 Google Drive)导入的文件。
我在模拟器和两个 android 设备上实现并测试了它。
当我在模拟器 Android 版本 6.0 上测试它时,由于它没有安装 DropBox 和 GoogleDrive,我看到了我所期待的,它能够 select 下载目录中的一个文件:
当我在 Google Pixel phone、Android 版本 7.1.2 上测试它时,一切都按我预期的那样工作。我可以从下载目录、Google Drive 以及 DropBox 中选择一个文件:
但是,当我在 Samsung Galaxy 4 设备 Android 版本 5.0.1 上对其进行测试时,我能够 select 来自 Google Drive 和 Dropbox 的文件,但我无法从我的下载目录中选择 select 文件:
这是我 select 创建文件的代码:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, GET_FILE_RESULT_CODE);
请告诉我如何解决此问题。谢谢!
我最终使用 ACTION_OPEN_DOCUMENT 成功了。现在我也可以从外部存储 select 文件 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 到 select,也请告诉我。谢谢!
要使 DocumentsActivity 与其他内容提供程序(例如 Dropbox 和 ASTRO 文件管理器)一起出现在 Android 版本 >= 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()
.
我在官方文档中找不到任何关于此的信息,但我已经在 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);
}