Android:如何在 ACTION_GET_CONTENT 中设置初始目录
Posted
技术标签:
【中文标题】Android:如何在 ACTION_GET_CONTENT 中设置初始目录【英文标题】:Android: How to set initial directory in ACTION_GET_CONTENT 【发布时间】:2017-08-04 19:38:21 【问题描述】:我需要我的用户从他们的外部文件中选择一个备份文件(以恢复),但有两个问题。
我给了我正在编写的 .sbu 扩展名的备份文件,但我无法弄清楚如何在 ACTION_GET_CONTENT 意图上创建文件资源管理器,以仅过滤 .sbu 文件。不过现在,我将 Intent 类型设置为 */*
当我的 INTENT 打开默认文件资源管理器时,我请求帮助设置默认初始目录的另一个更重要的问题。以下是我当前的代码,但似乎不起作用。
Intent ioIntent = new Intent(Intent.ACTION_GET_CONTENT);
ioIntent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/simple_information_manager/backup")), "*/*");
ioIntent.addCategory(Intent.CATEGORY_OPENABLE);
ioIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
if (ioIntent.resolveActivityInfo(parent.getPackageManager(), 0) != null)
doExit = false;
startActivityForResult(Intent.createChooser(ioIntent, getString(R.string.choose_file)), RESTORE);
else
Snackbar.make(listView.getRootView(), "Directory chooser not available", Snackbar.LENGTH_LONG).show();
【问题讨论】:
【参考方案1】:我给了备份文件,我正在编写一个扩展名为 .sbu 的文件,但我无法弄清楚如何根据 ACTION_GET_CONTENT 意图创建文件资源管理器,以仅过滤 .sbu 文件
这是不可能的。
当我的 INTENT 打开默认文件资源管理器时设置默认初始目录
ACTION_GET_CONTENT
协议中对此没有任何内容。很大程度上,这是因为ACTION_GET_CONTENT
没有绑定到文件和目录。
此外,没有“默认文件资源管理器”,尤其是在 android 4.3 及更早版本上。您可以争辩说存储访问框架 UI 填补了这个角色,尽管我倾向于将其更多地视为 Android 相当于桌面操作系统和相关平台的“文件打开”和“文件另存为”对话框。
你有两个主要的行动方针:
停止考虑文件、扩展名、目录,坚定地考虑内容。在这种情况下,您可以在 Android 4.4+ 上use ACTION_OPEN_DOCUMENT
。它提供EXTRA_INITIAL_URI
,这让人想起你的“默认初始目录”请求。
不要再考虑使用Intent
,而是使用use a file/directory chooser library。这些在内容来源方面没有那么灵活,但它们更适合您的文件/目录思维方式,并且可能提供更符合您期望的功能。
【讨论】:
我的应用程序处理敏感数据,我不想使用外部库。我也不太了解图书馆,因为这是我的第一个应用程序。图书馆是否需要额外的权限或在某种程度上成为用户的安全问题?到目前为止,我的应用程序必须使用零权限,我将首次添加外部存储写入权限以实现数据备份。 @Shahid:从安全角度来看,库与您自己的代码没有什么不同。以上是关于Android:如何在 ACTION_GET_CONTENT 中设置初始目录的主要内容,如果未能解决你的问题,请参考以下文章
Android File Transfer Mac: 如何在 macOS 和 Android 系统之间移动数据
Android:如何在 android studio 中配置 FFMPEG 最新版本?