Android >= 11 在没有 manage_external_storage 权限的情况下在文件夹之间导航以查找文件

Android >= 11 navigate between folder to find file without manage_external_storage permission

我有一个应用程序需要更新一些机器固件。 在定位 API 29 之前没有问题,现在 Google Play Store 至少需要定位 API30... 斗争开始了。

我使用的文件管理器选择器不再兼容(自 2020 年 2 月以来未维护),我找到了一个工作正常但需要 MANAGE_EXTERNAL_STORAGE 权限(除非它在文件夹之间导航但看到它们都是空的)。 Google 不允许将应用发布到 Play 商店,因为管理文件不是应用的主要范围。

我需要让用户浏览文件夹以搜索包含固件更新的 zip 文件,select 然后让应用打开它并执行更新。 该文件可以在设备上随处可见,由用户决定将其放置在何处。 该解决方案必须与 Android 8+ 兼容(因此从实际 12 开始)。

我该如何解决这个问题? 提前致谢!

按照@blackapps 的建议,删除 MANAGE_EXTERNAL_STORAGE 权限并切换到系统文件选择器解决了问题。

在 MainActivity 上

private void fileIntent() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("application/pdf");
}

在文件选取中

fun pickFirmwareFromStorage(context: Activity) {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/zip"

        // Optionally, specify a URI for the file that should appear in the
        // system file picker when it loads.
        val pickerInitialUri = "Download"
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }

    startActivityForResult(context, intent, PICK_FIRMWARE_REQUEST_CODE, null)
}