0

我有一个应用程序,可以通过 QR 码在最高 Android 12 的设备上成功设置为设备所有者,现在我为 android 12 添加了两个类似此链接的活动:Android 12 Device Owner Provisioning。并且设备所有者设置已完成,但是当我想运行我的应用程序时出现此错误:(而且我没有任何待处理的意图)

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.```
4

1 回答 1

0

这是因为您的一个或几个 PendingIntent 是在没有 Mutability 标志的情况下创建的。你能检查你是否传递了可变性标志(FLAG_MUTABLE 或 FLAG_IMMUTABLE)?如果您在创建后没有修改待处理的意图,我建议您添加 FLAG_IMMUTABLE。

这是我用来获取 Pending Intent 标志的方法,这样您就不必到处进行 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)
  )

这样无论是不是 android 12,你都不必担心这个标志。

于 2022-01-24T05:41:38.873 回答