Модель разрешения Android Marshmallow на OS 4.0 READ_EXTERNAL_STORAGE разрешение всегда не предоставляется
У меня возникла проблема при запуске моего приложения на Android OS 4.0 и запросе разрешения READ_EXTERNAL_STORAGE
с помощью:
ActivityCompat.requestPermissions(ctx, requestedPermissions, requestCode);
Я всегда получаю обратный вызов
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
grantResults != PackageManager.PERMISSION_GRANTED
Проверка разрешения с помощью ActivityCompat.checkSelfPermission
всегда возвращает permissionDenied
.
Он хорошо работает на ОС 6.0, запрашивая разрешение с системным диалогом.
Android OS 4.x исключает 4.0, разрешение всегда предоставляется.
OS 4.0 другие разрешения (камера, календарь, контакт, телефон) ведут себя хорошо, кроме READ_EXTERNAL_STORAGE
, вызывающих эту проблему.
Возможно, проблема с ОС?
Ответы
Ответ 1
Что ActivityCompat.requestPermissions()
делает:
-
перейдите к реальному requestPermissions()
, если вы находитесь на Android 6.0+ или
-
используйте PackageManager
, чтобы узнать, сохраняете ли вы требуемые разрешения для более старых версий Android
Проблема с READ_EXTERNAL_STORAGE
заключается в том, что она была добавлена в API Level 16 (Android 4.1). Вы не можете держать его в старых версиях Android по той простой причине, что его не было.
Или:
-
Установите minSdkVersion
на 16 или
-
Поставьте свою собственную логику для обработки этого случая, признав, что READ_EXTERNAL_STORAGE
не имеет значения до уровня API 16