#android #flutter #android-permissions #whatsapp #android-11
Вопрос:
Я пытаюсь создать приложение Flutter, которое работает на Android 11 и загружает файлы. Я использовал для этого разрешение на управление внешним хранилищем, но когда приложение запрашивает разрешение, оно переходит непосредственно в настройки, а не запрашивает разрешение или запрет в приложении.
Например, WhatsApp хранит данные в папке android/media, но запрашивает разрешение непосредственно в приложении, а не на странице настроек. Пожалуйста, обратитесь к приведенным ниже изображениям:
Мое приложение переходит к настройкам, подобным этому / Мне нужно что-то вроде этого
Мой код обработки разрешений
Future<bool> requestPermission() async {
var androidInfo = await DeviceInfoPlugin().androidInfo;
var release = int.parse(androidInfo.version.release);
Permission permission;
if (release < 11) {
permission = Permission.storage;
} else {
permission = Permission.manageExternalStorage;
}
if (await permission.isGranted) {
return true;
} else {
var result = await permission.request();
if (result == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
}
Комментарии:
1. Пожалуйста, поделитесь своим фрагментом кода для лучшей помощи. Кроме того, экран настроек должен открываться только в том случае, если пользователь постоянно отказывал в разрешении, в соответствии с руководящими принципами.
2. Поделитесь своим кодом или проверьте этот pub.dev/пакеты/permission_handler
3. Похоже, вам нужно добавить проверки на наличие запрещенного разрешения, постоянно запрещенного разрешения. только на запрещенной постоянно открытой странице настроек. В противном случае запросите разрешение
4. эй, Нараяна, ты нашел решение этой проблемы ?
Ответ №1:
Это два разных подхода к управлению доступом к внешнему хранилищу на устройстве Android для Android 11 и выше.
Файлы Go пытается получить доступ к all files access permission
. Это дает приложению доступ к любому чтению, записи, доступу и обмену всеми файлами, находящимися в пользовательском хранилище(внешнем или внутреннем). Вы можете прочитать больше о разрешении на доступ ко всем файлам здесь — Управление всеми файлами на устройстве хранения
WhatsApp — вместо того , чтобы запрашивать all files access permission
, сохраняет свои носители в каталоге файлов. Для сохранения в каталоге файлов или кэша не требуется доступ ко всем файлам, и простое диалоговое окно разрешений для записи и чтения в хранилище выполняет эту задачу.
Вы можете прочитать больше об этом в getExternalFilesDir.
Примечание: Это применимо только в том случае, если ваша версия targetSdk равна 30. Ориентируясь на версию 29 или ниже, в этом нет необходимости all files permission
, поскольку она обрабатывается системой.
Вы можете обратиться к обновлениям хранилища и запросить разрешение в соответствии с вашим вариантом использования в обновлениях хранилища в Android 11.
Комментарии:
1. В ссылках, которые вы предоставили, не упоминалось, как это реализовать в flutter, например в whatsapp
2. Удаление Permission.manageExternalStorage из кода должно помочь
3. если вы удалите Permission.manageExternalStorage, вы больше не сможете читать скрытую папку для этого местоположения /хранилища/эмулируемого/0/Android/Медиа/com.whatsapp/WhatsApp/Медиа/.Статусы Какое-либо решение этой проблемы ?
4. @Ankitparm , если это имя пакета/хранилища вашего приложения , вы можете прочитать его, если это не ваше приложение, вы не можете получить к нему доступ.
5. @Nitish Я знаю, но как прочитать скрытую папку других приложений ? без разрешения.Разрешение manageExternalStorage ?
Ответ №2:
Даже если вы используете Android 11 или выше, мы должны запросить разрешение на хранение, а не разрешение на управление внешним хранилищем в Flutter. Я попытался записать файлы в » android/media/имя пакета/», и он работает нормально, но когда я пытаюсь записать в другие места, он не работает. Я думаю, что каким-то образом Android внутренне позволяет хранить данные только в одном пакете.