Ненормальное поведение запроса разрешения на Android 13 Tiramisù
У меня есть метод, чтобы показать разрешения запроса, если это необходимо
static boolean requestPermission(int id, String... permissions) {
System.out.println("REQUEST PERMISSION METHOD");
boolean granted = true;
ArrayList<String> list = new ArrayList<>();
for (String s : permissions) {
int check = ContextCompat.checkSelfPermission(this, s);
boolean hasPermission = (check == PackageManager.PERMISSION_GRANTED);
granted &= hasPermission;
if (!hasPermission) {
list.add(s);
}
}
if (granted) {
return true;
} else {
ActivityCompat.requestPermissions(this, permissionsNeeded.toArray(new String[permissionsNeeded.size()]), id);
return false;
}
}
Этот метод работал до Android 13, который я тестирую с последним официальным эмулятором Android в Android Studio, теперь, еслиonResume()
я звоню например
requestPermission(id,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE));
У меня есть цикл безрезультатных запросов: я не получаю никаких сбоев, но в журнале cat я продолжаю"REQUEST PERMISSION METHOD"
печатает, строка print помещается в начало метода, как если бы метод каким-то образом вызывался постоянно.
Почему это? Как мне решить эту проблему?
1 ответ
Проблема вызвана тем, что
ActivityCompat.requestPermissions(...)
Таким образом, оберните запросы с надлежащей проверкой уровня API или выберите более низкую версию Android, пока приложение не будет должным образом перенесено в SAF (поэтому вам не нужен прямой доступ к хранилищу и соответствующие разрешения).