Android: 如何在 ACTION_GET_CONTENT 中设置初始目录

Android: How to set initial directory in ACTION_GET_CONTENT

我需要我的用户从他们的外部文件中选择一个备份文件(以恢复),有两个问题。

  1. 我给了我正在写的备份文件扩展名 .sbu 但我无法弄清楚如何使文件资源管理器 ACTION_GET_CONTENT 意图只过滤 .sbu文件。不过现在,我将意图类型设置为 */*

  2. 另一个更重要的问题,当我的 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();
    }
    

I gave the backup file I am writing an extension of .sbu and I was not able to figure out how to make the file explorer on ACTION_GET_CONTENT intent, to filter only .sbu files

那是不可能的。

set a default initial directory when my INTENT opens up the default file explorer

ACTION_GET_CONTENT 协议中没有这方面的内容。很大程度上,这是因为 ACTION_GET_CONTENT 没有绑定到文件和目录。

此外,没有 "default file explorer",尤其是 Android 4.3 及更早版本。你可以争辩说存储访问框架 UI 扮演了这个角色,尽管我倾向于认为它更像是 Android 等同于桌面操作系统的 "file-open" 和 "file-save-as" 对话框和相关平台。

您有两个主要的行动方案:

  1. 停止考虑文件、扩展名、目录,坚定地考虑内容。在这种情况下,您可以在 Android 4.4+ 上 use ACTION_OPEN_DOCUMENT。它提供 EXTRA_INITIAL_URI,这让人想起您的 "default initial directory" 请求。

  2. 停止考虑使用 Intent,而是 use a file/directory chooser library。这些在内容来源方面没有那么灵活,但它们更适合您的 file/directory 心态,并且可能提供更符合您期望的功能。