【发布时间】:2016-10-12 14:14:34
【问题描述】:
我已经创建了 Intent 来选择像这样的任何文件:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
之后我添加了以下行以仅选择本地文件并删除不相关的应用程序,例如 Drive 等
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
之后我为单个文件选择添加了以下几行
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);
}
之后我添加了以下行以删除不相关的应用程序,例如联系人或任何其他
intent.addCategory(Intent.CATEGORY_OPENABLE);
终于
context.startActivityForResult(intent, REQUEST_PICK_ANY_FILE);
问题 1: android 中的默认文件选择器仍然显示“错误报告”选项,我该如何删除该选项。 (在 Nexus 5x - android 7 中测试)
问题 2: 文件选择器显示隐藏文件,我如何启用或禁用隐藏文件以便启用或禁用它的选择(在 Nexus 5x - android 7 中测试)
【问题讨论】:
-
“我已经创建了选择任何文件的意图”——
Intent没有选择文件。它允许用户从可用的ACTION_GET_CONTENT支持活动中选择一段内容。如果您想要选择一个文件,并且想要将演示文稿控制到您想要的级别,请将a file-chooser library 添加到您的应用中。 -
感谢 CommonsWare,我不想实现任何库。我优先考虑默认的 android 系统功能。你能告诉我如何创建意图,以便可以选择任何本地文件,如 txt、html、xml、apk、pdf、音频、视频任何本地文件。我不想被选中的东西,比如联系人、错误报告或任何其他不相关的文件。
-
“你能告诉我如何创建意图,以便可以选择任何本地文件,如 txt、html、xml、apk、pdf、音频、视频任何本地文件”——没有这样的
Intent。 Android 专注于来自任意位置的内容,而不是文件系统上的文件。要么使用库,创建自己的文件浏览 UI,不要将自己局限于文件(并接受ACTION_GET_CONTENT的其他功能),或者从你的应用程序中删除此功能。 -
谢谢,如果用户选择错误报告文件而不是我在 onActivityResult() 中获取路径,例如“content://com.android.shell.documents/document/bugreport%3Adumpstate_log-2016-09-21 -08-06-57-4461.txt”。如何将其转换为 File 对象。
-
你没有。
ACTION_GET_CONTENT返回的任何内容都必须是文件。您会注意到操作名称不是ACTION_GET_FILE。如果您收到Uri,就像发送给onActivityResult()、consume the content from theUriproperly 的那些(例如ContentResolver和openInputStream())。
标签: android android-intent filepicker