Как получить доступ «Запросить все файлы» на Android 11

Я изучаю изменения доступа к файлам, связанные с Android 11.

Я настроил AVD для Android R и создал тестовое приложение со следующим содержимым манифеста.

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:tools = "http://schemas.android.com/tools"
    package = "com.my.application">

    <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name = "android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore = "ScopedStorage" />

Затем я создаю это намерение и запускаю действие, ожидая увидеть разрешение на доступ для управления всеми файлами. в настройках системы

    val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
    val uri = Uri.fromParts("package", packageName, null)
    intent.data = uri
    startActivity(intent)

Однако пользователю предоставляется экран информации о приложении для моего тестового приложения.

Если я поищу в настройках, то найду Apps & Notifications -> Special App Access -> All files access -> My test app is listed

Это процесс, которому пользователи должны следовать, чтобы предоставить это разрешение?

Почему использование намерения, которое я создал, не приводит пользователя непосредственно на страницу доступа ко всем файлам?

Пожалуйста, посмотрите этот способ в этой ссылке, это может быть полезно. stackoverflow.com/a/67140033/12272687

Mori 17.04.2021 18:01

Пожалуйста, посмотрите этот способ в этой ссылке, это может быть полезно. stackoverflow.com/a/67140033/12272687 Может помочь чтение/запись для всех файлов

Mori 17.04.2021 18:18
1
2
6 317
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Реализация намерения для

  Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION 

предоставит вашему приложению доступ для чтения / записи ко всем файлам, даже на съемной карте micro sd.

if (SDK_INT >= Build.VERSION_CODES.R) {
        if (!Environment.isExternalStorageManager()) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            Uri uri = Uri.fromParts("package", getPackageName(), null);
            intent.setData(uri);
            startActivity(intent);
        }
    } else {
        //below android 11=======
        startActivity(new Intent(this, ActivityPicture.class));
        ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE}, 100);
    }

Также добавьте это в манифест:

<uses-permission android:name = "android.permission.MANAGE_EXTERNAL_STORAGE"/>

Другие вопросы по теме