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разрешения? Не следует ли мне запрашивать их одновременно?

0 ответов

Другие вопросы по тегам