Я работаю над приложением .NET MAUI 8 и столкнулся с проблемой доступа к внешнему хранилищу. Мне нужно прочитать файлы из внешнего хранилища, но мои попытки запросить разрешение READ_EXTERNAL_STORAGE не увенчались успехом.
Вот что я пробовал до сих пор:
Запрос разрешения: я реализовал логику запроса разрешения для READ_EXTERNAL_STORAGE, но он немедленно отклоняется. Проверка статуса разрешения: я проверил статус разрешения, и он сообщается как отклоненный, хотя другие разрешения работают нормально. Решение GitHub. Я воспользовался решением из этого репозитория GitHub, но оно не решило проблему. (https://github.com/dotnet/maui-samples/tree/main/8.0/PlatformIntegration/PlatformIntegrationDemos)
Что я сделал:
Я убедился, что добавил необходимое разрешение в файл Android AndroidManifest.xml. Я обработал запросы разрешений и проверки статуса в соответствии с документацией.
Фрагменты кода:
AndroidManifest.xml
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
Код запроса разрешения:
var status = await Permissions.RequestAsync<Permissions.StorageRead>();
if (status != PermissionStatus.Granted)
{
// Handle the denied permission case
}
Мое окружение:
Версия .NET MAUI: 8 Целевая версия Android: 14.
минимальная версия Android 5
Может ли кто-нибудь помочь мне понять, почему в моем приложении .NET MAUI 8 отказано в разрешении READ_EXTERNAL_STORAGE? Требуются ли какие-либо дополнительные действия или настройки для успешного запроса и использования этого разрешения? Будем очень признательны за любые идеи или решения!
Кроме того, вы действительно нацелены на Android 7?
Извините, на самом деле целевая версия Android — 14, а минимальная версия Android — 5.
Для целевой версии Android 13 знак <uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
был удален, поэтому диалоговое окно запроса разрешения никогда не появится на Android 13 или более поздней версии. Значение Permissions.RequestAsync<Permissions.StorageRead>
всегда будет PermissionStatus.Denied
.
Но в качестве обходного пути вы можете изменить целевую версию Android вашего приложения на Android 12, чтобы предупреждение о запросе разрешения READ_EXTERNAL_STORAGE
по-прежнему появлялось на устройстве с Android 13 или более поздней версии. Добавьте следующий код в AndroidManifest.xml
:
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
<uses-sdk android:minSdkVersion = "21" android:targetSdkVersion = "31" />
Примечание:
И есть некоторые относительные проблемы, вы можете следить за ними здесь:
Разрешения CheckStatusAsync или CheckStatusAsync возвращает «Отказано» вместо «Ограничено»
Привет, спасибо за ответ, моя целевая версия Android — 14, а с .NET 8 я не могу ее понизить. и есть ли способ получить READ_EXTERNAL_STORAGE в Android >= 13? Почему его удалили, есть ли возможность его получить?
Вы пытались добавить код, которым я поделился выше, в файл AndroidManifest.xml
?
Привет, @JessieZhang-MSFT Спасибо за трюк, он сработал, поскольку я получил всплывающее окно и разрешение показало «Предоставлено», но почему он не смог найти файлы в каталоге! проверьте это ниже - if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) == Permission.Granted) { stringfolderPath = "/storage/emulated/0/MIUI/sound_recorder/call_rec"; строка [] filePaths = Directory.GetFiles(folderPath); foreach (var filePath в filePaths) { } }
Это должна быть еще одна проблема. Одна проблема, одна тема. Для этой новой проблемы вы можете создать новую тему. Мы все готовы помочь вам. :)
Спасибо за помощь. Да, я создам еще один. Еще раз спасибо :-)
Пожалуйста, отформатируйте свой пост так, чтобы его можно было прочитать. Обычный текст не должен форматироваться как блоки кода.