Android RequestMultiplePermissions не запрашивает разрешения с определенными комбинациями разрешений?
Я обновляю приложение, которое в настоящее время использует разрешение и с новыми требованиями API 30, теперь также потребуется разрешение.
При обновлении приложения для добавления этого разрешения я также пытаюсь использовать новый метод обратного вызова ActivityResultLauncher для запроса разрешений ( https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code )
Кажется, это хорошо работает при запуске одиночных запросов в следующих строках:
ActivityResultLauncher<String> launcher = registerForActivityResult(
new ActivityResultContracts.RequestPermission(), this::processPermissionResult);
launcher.launch(somePermission);
Однако, поскольку мне нужны оба, и для этого требуется дополнительный код для отслеживания результатов нескольких обратных вызовов (поскольку каждый запрос будет генерировать свой собственный обратный вызов), чтобы я мог предпринять соответствующие действия, если были предоставлены одно, оба или ни одно из разрешений .
Чтобы немного упростить это, я хотел использовать вместо этого метод, который для удобства предоставил бы мне один обратный вызов со всеми результатами на карте:
ActivityResultLauncher<String[]> launcher = registerForActivityResult(
new ActivityResultContracts.RequestMultiplePermissions(), this::processPermissionResult);
launcher.launch(new String[] {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
});
Однако я обнаружил, что в тот момент, когда я запрашиваю оба и в том же запросе, мне больше не предлагается ни одно диалоговое окно разрешений, и обратный вызов возвращается с ложью для обоих разрешений.
Однако я могу делать отдельные запросы для этих разрешений, используя, передавая ему массив, содержащий одно разрешение, а затем вызывая запуск несколько раз, используя тот же подход, как если бы я использовал одно
RequestPermission
звоните, и это сработает.
Кажется, что существует конфликт / взаимодействие между разрешениями и, когда дело доходит до
RequestMultiplePermissions
? Мне удалось извлечь и использовать другое разрешение, например
WRITE_EXTERNAL_STORAGE
, и я бы получил два отдельных запроса в диалоговом окне разрешений.
Я что-то не понимаю в
ACCESS_FINE_LOCATION
и
ACCESS_BACKGROUND_LOCATION
разрешения? Не следует ли мне запрашивать их одновременно?