在每一个新的消息来到我的帐户,应用程序重新启动自己。然后它给出了这个错误。我试图找到解决方案,但失败了。我写在底线的错误代码。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.edusoft.teacher.myeducare, PID: 7367
java.lang.RuntimeException: Unable to start receiver com.onesignal.GcmBroadcastReceiver: java.lang.IllegalArgumentException: com.edusoft.teacher.myeducare: 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.ActivityThread.handleReceiver(ActivityThread.java:4438)
at android.app.ActivityThread.access$1700(ActivityThread.java:265)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2114)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Caused by: java.lang.IllegalArgumentException: com.edusoft.teacher.myeducare: 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:378)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:648)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:635)
at com.onesignal.GenerateNotification.getNewActionPendingIntent(GenerateNotification.java:195)
at com.onesignal.GenerateNotification.createGenericPendingIntentsForNotif(GenerateNotification.java:404)
at com.onesignal.GenerateNotification.showNotification(GenerateNotification.java:388)
at com.onesignal.GenerateNotification.fromJsonPayload(GenerateNotification.java:116)
at com.onesignal.NotificationBundleProcessor.ProcessJobForDisplay(NotificationBundleProcessor.java:115)
at com.onesignal.NotificationBundleProcessor.ProcessFromGCMIntentService(NotificationBundleProcessor.java:98)
at com.onesignal.GcmBroadcastReceiver.startGCMService(GcmBroadcastReceiver.java:138)
at com.onesignal.GcmBroadcastReceiver.processOrderBroadcast(GcmBroadcastReceiver.java:129)
at com.onesignal.GcmBroadcastReceiver.onReceive(GcmBroadcastReceiver.java:70)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:4425)
... 9 more
我发现这个代码,但要么我没有正确使用它或它不能正常工作
val updatedPendingIntent = PendingIntent.getActivity(
applicationContext,
NOTIFICATION_REQUEST_CODE,
updatedIntent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT // setting the mutability flag
)
3条答案
按热度按时间wlp8pajw1#
如果您的应用面向Android 12,则必须指定应用创建的每个PendingIntent对象的可变性。此附加要求可提高应用的安全性。
PendingIntent contentIntent = PendingIntent.getActivity(context,NOTIFICATION_REQUEST_CODE, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
我们构建了一个标准类型的Intent,它将打开我们的应用,然后在将其添加到通知之前将其简单地 Package 在PendingIntent中。在本例中,由于我们知道要执行的操作,因此我们构建了一个PendingIntent,它不能被我们通过使用FLAG_IMMUTABLE标记将其传递到的应用修改。
如果你的目标是Android S+,并且你已经在你的应用程序中集成了FCM,则必须进行此更改。
如果您计划迁移与Android 12兼容的应用,您可以选中this blog。
u5rb5r592#
使用此
yacmzcpb3#
在显示错误日志中,*
Android应用程序目标为31,其在Firebase消息传递(PendingIntent)或通知功能中报告了更多崩溃(仅Android OS 12用户)。当应用程序在通知接收时处于暂停/后台状态时,其崩溃。
此外,您可能需要将实现
"androidx.work:work-runtime-ktx:2.5.0"
的版本提高到最新更新参考链接