Инициализация владельца устройства Android 12 с помощью QR-кода

У меня есть приложение, которое можно успешно настроить в качестве владельца устройства на устройствах до Android 12 с помощью QR-кода, и теперь я добавляю два действия, подобные этой ссылке для Android 12: Подготовка владельца устройства Android 12 . и настройка владельца устройства завершена, но когда я хочу запустить свое приложение, у меня возникает эта ошибка: (и у меня нет ожидающих намерений)

      java.lang.IllegalArgumentException: io.phoenixdev.afw.emm: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.```

1 ответ

это потому, что один или несколько ваших PendingIntent создаются без флага Mutability. Можете ли вы проверить, передаете ли вы флаг изменчивости (FLAG_MUTABLE или FLAG_IMMUTABLE)? Если вы не изменяете ожидающее намерение после его создания, я бы рекомендовал добавить FLAG_IMMUTABLE.

Вот метод, который я использую для получения флагов для ожидаемого намерения, чтобы вам не приходилось везде выполнять проверки Android 12.

      public static int getPendingIntentFlag(boolean mutable) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        return mutable ? PendingIntent.FLAG_MUTABLE : 
               PendingIntent.FLAG_IMMUTABLE;
    }
    return 0;
}

Просто вызовите getPendingIntentFlag(false) для неизменяемых намерений, подобных этому

       val pendingIntent = PendingIntent.getBroadcast(
            context, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT or 
            Utils.getPendingIntentFlag(false)
  )

Таким образом, либо андроид 12, либо нет, вам не нужно беспокоиться об этом флаге.

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