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:如何在 android studio 中配置 FFMPEG 最新版本?

如何在 Android 上将 TextView 居中?

Android:如何在 android 4.2 上折叠状态栏? [复制]

如何在android中使用WCF服务?