Я переключил свое приложение для целевой API 27, и теперь она не может быть предоставлено WRITE_EXTERNAL_STORAGE
разрешения - grantResult
всегда -1
.
Мое приложение нуждается в этом разрешении, так как оно не использует закрытое внешнее хранилище приложений (которое не требует WRITE_EXTERNAL_STORAGE
начиная с API 19).
Я знаю, что в API 26 были изменения поведения для разрешений. Однако это не объясняет мою проблему.
Я запрашиваю как READ_EXTERNAL_STORAGE
и WRITE_EXTERNAL_STORAGE
разрешения стандартным образом:
ActivityCompat.requestPermissions(activity, new String[] {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, requestCode);
(оба разрешения объявляются через <uses-permission
в манифесте).
Появится диалоговое окно, и я нажимаю "Разрешить":
Однако внутри обратного вызова onRequestPermissionsResult
я получаю -1
(отклонено) для WRITE_EXTERNAL_STORAGE
(и 0
(предоставлено) для READ_EXTERNAL_STORAGE
).
Разве не должен быть 0
для обоих, поскольку я попросил и, предположительно, предоставил оба?
Я попытался запросить только WRITE_EXTERNAL_STORAGE
, но в этом случае диалог вообще не отображается.
Еще одна деталь: я только что проверил объединенный манифест в build/intermediates/manifests/full/debug
и заметил, что разрешение WRITE_EXTERNAL_STORAGE
имеет атрибут android:maxSdkVersion="18"
(в моем манифесте нет такого атрибута). Это может произойти, потому что у моего приложения есть minApiVersion=21
, но я не уверен.