针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一,On AlarmPingSender
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent, On AlarmPingSender
问题
针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。我在将目标 SDK 更新到 31 后得到它。错误总是在 AlarmPingSender 之后出现。但我不知道有任何 class 使用了 AlarmPingSender。
2021-10-31 10:43:04.990 17031-17341/com.app.mobile D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.com.app.mobile-2e24ccbde048f2e91635651784
2021-10-31 10:43:04.993 17031-17341/com.app.mobile E/AndroidRuntime: FATAL EXCEPTION: MQTT Rec: com.app.mobile-2e24ccbde048f2e91635651784
Process: com.app.mobile, PID: 17031
java.lang.IllegalArgumentException: com.app.mobile: 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.
at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:632)
at org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)
at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1150)
at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:987)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:118)
at java.lang.Thread.run(Thread.java:920)
我已经做了什么
- 将 WorkManager 升级到 2.7.0
- 设置 AllProject 以强制使用 WorkManager 到 2.7.0
- 更改所有现有的 PendingIntent 以使用 FLAG_IMMUTABLE
- 旧代码仍然使用 gcm 并禁用它
- 正在更新所有 Firebase 包(有人说是因为更高版本的分析)
使用的库
- OneSignal
- 漆树
- Firebase
- 工作管理器
可能的解决方案
将 google 分析升级到 Firebase 分析。希望它能解决您的问题 problems.Also 升级您正在使用的所有库。
对我来说,以下解决方案解决了问题。
将 PendingIntent.FLAG_IMMUTABLE
添加到您的待定意向。
这是一个例子-
PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
如需进一步信息,请关注此 link -
https://developer.android.com/reference/android/app/PendingIntent#FLAG_IMMUTABLE
在多次尝试解决此问题后,我放弃了并尝试联系 Qiscus。他们发布了处理此未决意图行为更改的新版本。因此,如果有人使用 Qiscus 并遇到此错误,您可以使用最新标签
https://github.com/qiscus/qiscus-sdk-android/releases/tag/1.3.35
我遇到了这个崩溃,但没有第 3 方库。使用最新版本添加此导入将修复崩溃。
implementation 'androidx.work:work-runtime-ktx:2.7.0-beta01'
将以下内容添加到您的 build.gradle(app)
依赖项中。
dependencies {
// For Java
implementation 'androidx.work:work-runtime:2.7.1'
// For Kotlin
implementation 'androidx.work:work-runtime-ktx:2.7.1'
}
除了别人的回答我改了:
implementation 'com.google.firebase:firebase-messaging:20.0.0'
至:
implementation 'com.google.firebase:firebase-messaging:23.0.0'
现在可以使用了。
这可能是库版本的问题。如果您的项目中有旧版本库,则必须将其更新到最新版本。
因此,按如下方式更新工作运行时和 firebase 消息传递库版本,
dependencies {
// For Java
implementation 'androidx.work:work-runtime:2.7.1'
// For Kotlin
implementation 'androidx.work:work-runtime-ktx:2.7.1'
implementation 'com.google.firebase:firebase-messaging:23.0.0'
...
}
另外,确保待处理的意图代码是这样的,
PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
问题
针对 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。我在将目标 SDK 更新到 31 后得到它。错误总是在 AlarmPingSender 之后出现。但我不知道有任何 class 使用了 AlarmPingSender。
2021-10-31 10:43:04.990 17031-17341/com.app.mobile D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.com.app.mobile-2e24ccbde048f2e91635651784
2021-10-31 10:43:04.993 17031-17341/com.app.mobile E/AndroidRuntime: FATAL EXCEPTION: MQTT Rec: com.app.mobile-2e24ccbde048f2e91635651784
Process: com.app.mobile, PID: 17031
java.lang.IllegalArgumentException: com.app.mobile: 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.
at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:632)
at org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)
at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1150)
at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:987)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:118)
at java.lang.Thread.run(Thread.java:920)
我已经做了什么
- 将 WorkManager 升级到 2.7.0
- 设置 AllProject 以强制使用 WorkManager 到 2.7.0
- 更改所有现有的 PendingIntent 以使用 FLAG_IMMUTABLE
- 旧代码仍然使用 gcm 并禁用它
- 正在更新所有 Firebase 包(有人说是因为更高版本的分析)
使用的库
- OneSignal
- 漆树
- Firebase
- 工作管理器
可能的解决方案
将 google 分析升级到 Firebase 分析。希望它能解决您的问题 problems.Also 升级您正在使用的所有库。
对我来说,以下解决方案解决了问题。
将 PendingIntent.FLAG_IMMUTABLE
添加到您的待定意向。
这是一个例子-
PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
如需进一步信息,请关注此 link - https://developer.android.com/reference/android/app/PendingIntent#FLAG_IMMUTABLE
在多次尝试解决此问题后,我放弃了并尝试联系 Qiscus。他们发布了处理此未决意图行为更改的新版本。因此,如果有人使用 Qiscus 并遇到此错误,您可以使用最新标签
https://github.com/qiscus/qiscus-sdk-android/releases/tag/1.3.35
我遇到了这个崩溃,但没有第 3 方库。使用最新版本添加此导入将修复崩溃。
implementation 'androidx.work:work-runtime-ktx:2.7.0-beta01'
将以下内容添加到您的 build.gradle(app)
依赖项中。
dependencies {
// For Java
implementation 'androidx.work:work-runtime:2.7.1'
// For Kotlin
implementation 'androidx.work:work-runtime-ktx:2.7.1'
}
除了别人的回答我改了:
implementation 'com.google.firebase:firebase-messaging:20.0.0'
至:
implementation 'com.google.firebase:firebase-messaging:23.0.0'
现在可以使用了。
这可能是库版本的问题。如果您的项目中有旧版本库,则必须将其更新到最新版本。
因此,按如下方式更新工作运行时和 firebase 消息传递库版本,
dependencies {
// For Java
implementation 'androidx.work:work-runtime:2.7.1'
// For Kotlin
implementation 'androidx.work:work-runtime-ktx:2.7.1'
implementation 'com.google.firebase:firebase-messaging:23.0.0'
...
}
另外,确保待处理的意图代码是这样的,
PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);