【问题标题】:(KOTLIN) Requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent(KOTLIN) 要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一
【发布时间】:2022-11-21 22:53:24
【问题描述】:

在我的帐户收到的每条新消息中,应用程序都会自行重启。然后它给出了这个错误。我试图找到解决方案但失败了。我在底行写了错误代码。

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 
)

【问题讨论】:

  • 您是否以某种方式将 PendingIntent 提供给 OneSignal?此崩溃来自 OneSignal 及其基于堆栈跟踪的 FCM 消息的接收。我的猜测是您需要更新您的 OneSignal SDK 或以其他方式与他们讨论这次崩溃。

标签: java android android-studio kotlin android-pendingintent


【解决方案1】:

用这个

val updatedPendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
    } else {
        PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    }

【讨论】:

  • 我到底应该在哪里写这个?主要活动?因为它在主页上有同样的情况我在messageFragment网站上也有同样的问题
【解决方案2】:

在您的日志中显示错误, *

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.

Android 应用程序针对 31 个报告了 Firebase Messaging (PendingIntent) 或通知功能.当应用程序在收到通知时处于暂停/后台状态时崩溃。

另外,可能需要将实现版本"androidx.work:work-runtime-ktx:2.5.0"增加到最新更新

Reference link

 val updatedPendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        PendingIntent.getActivity(
            applicationContext, NOTIFICATION_REQUEST_CODE, updatedIntent, PendingIntent.FLAG_IMMUTABLE
        )
    } else {
        PendingIntent.getActivity(
            applicationContext, NOTIFICATION_REQUEST_CODE, updatedIntent, PendingIntent.FLAG_ONE_SHOT
        )
    }

【讨论】:

  • 请详细解释这如何与问题中显示的堆栈跟踪相关联。
猜你喜欢
  • 2021-09-29
  • 2023-01-30
  • 2021-09-14
  • 1970-01-01
  • 2022-10-05
  • 2023-01-01
  • 2022-01-08
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多