Das Targeting von S+ (Version 31 und höher) erfordert, dass einer von FLAG_IMMUTABLE oder FLAG_MUTABLE angegeben wird, wenn ein PendingIntent, On AlarmPingSender, erstellt wird

Lesezeit: 5 Minuten

Benutzeravatar von Joseph Sanjaya
Josef Sanjaya

Problem

Für das Targeting von S+ (Version 31 und höher) muss beim Erstellen eines PendingIntent entweder FLAG_IMMUTABLE oder FLAG_MUTABLE angegeben werden. Ich habe es nach dem Aktualisieren des Ziel-SDK auf 31 bekommen. Der Fehler kommt immer nach AlarmPingSender. Aber ich kenne keine Klasse, die AlarmPingSender verwendet hat.


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)

Was ich bereits getan habe

  • Aktualisieren Sie WorkManager auf 2.7.0
  • Stellen Sie AllProject ein, um die Verwendung von WorkManager auf 2.7.0 zu erzwingen
  • Ändern Sie alle vorhandenen PendingIntent, um FLAG_IMMUTABLE zu verwenden
  • Es gibt alten Code, der immer noch gcm verwendet und es deaktiviert
  • Aktualisieren aller Firebase-Pakete (einige sagten, es sei wegen einer späteren Version von Analytics)

Bibliothek verwendet

  • OneSignal
  • Qiskus
  • Firebase
  • Arbeitsmanager

  • Die Fehlermeldung besagt, dass Ihr Fehler darauf zurückzuführen ist org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)die sich auf die von Ihnen verwendete MQTT-Bibliothek bezieht.

    – ianhanniballake

    31. Oktober 2021 um 4:56 Uhr

  • Ja, das denke ich auch, aber ich kann nicht herausfinden, welche Bibliothek MQTT verwendet hat, ich vermute, es ist Qiscus, aber ich habe versucht, auf die neueste Version zu aktualisieren, aber das Problem besteht weiterhin.

    – Josef Sanjaya

    31. Oktober 2021 um 7:54 Uhr

  • Sie können auschecken Gradles Build-Scan um zu sehen, welche Abhängigkeit in die Eclipse-Paho-Bibliothek gezogen wird

    – Lubos Mudrak

    31. Oktober 2021 um 9:29 Uhr

  • Ich glaube, dass dieser Code github.com/eclipse/paho.mqtt.android/blob/master/… (Zeile 76) muss aktualisiert werden, um den neuen Android-Einschränkungen zu entsprechen. github.com/eclipse/paho.mqtt.android/issues/465

    – Cassio Landim

    24. Januar um 15:13 Uhr


  • Aktualisieren Sie einfach Ihre Version der Firebase Messaging-Bibliothek auf die neueste Version (23 oder höher) und führen Sie die erforderlichen Änderungen durch, und schon sind Sie fertig. Es wird dieses Problem beheben. Aber ja, fügen Sie dieses FLAG_IMMUTABLE auch zu Ihrem PendingIntent-Flag im Anwendungscode hinzu.

    – Harpret

    16. November um 13:56 Uhr

Fügen Sie Folgendes zu Ihrer hinzu build.gradle(app) Abhängigkeiten.

dependencies {
  // For Java
  implementation 'androidx.work:work-runtime:2.7.1' 

  // For Kotlin
  implementation 'androidx.work:work-runtime-ktx:2.7.1'
}

Benutzeravatar von Al-Amin
Al-Amin

Mögliche Lösung

Aktualisieren Sie Google Analytics auf Firebase Analytics. Hoffe, es wird Ihre Probleme lösen. Aktualisieren Sie auch die gesamte Bibliothek, die Sie verwenden.

Für mich lösen die folgenden Lösungen das Problem.

Hinzufügen PendingIntent.FLAG_IMMUTABLE zu Ihren ausstehenden Absichten.

Hier ist ein Beispiel –

PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);

Für weitere Informationen folgen Sie diesem Link –
https://developer.android.com/reference/android/app/PendingIntent#FLAG_IMMUTABLE

  • Das habe ich schon probiert, aber das Problem besteht weiterhin.

    – Josef Sanjaya

    31. Oktober 2021 um 7:54 Uhr

  • Das Aktualisieren der Firebase-Bibliothek hat das Problem für mich gelöst.

    – Pawel

    16. November 2021 um 13:23 Uhr

  • Wie aktualisiere ich Google Analytics auf Firebase Analytics?

    – Benazir Sh

    8. Februar um 15:36 Uhr

  • Nur ein Hinweis für Leute, die PendingIntent verwenden, um eine Methode aus einer Bibliothek eines Drittanbieters aufzurufen … Sie können im vierten Argument mehrere Flags ausgeben, indem Sie den “or”-Operator in Kotlin oder “|” verwenden. Operator in Java.

    – Varun

    15. Oktober um 14:11 Uhr


Ich hatte diesen Absturz, aber keine Bibliotheken von Drittanbietern. Das Hinzufügen dieses Imports mit der neuesten Version behebt den Absturz.

implementation 'androidx.work:work-runtime-ktx:2.7.0-beta01'

  • Funktioniert bei mir. In meinem Fall geändert in: implementierung(“androidx.work:work-runtime-ktx:2.7.1”)

    – Würfel

    26. Januar um 17:09 Uhr

Zusätzlich zu den Antworten anderer habe ich geändert:

implementation 'com.google.firebase:firebase-messaging:20.0.0'

zu :

implementation 'com.google.firebase:firebase-messaging:23.0.0'

und es funktioniert jetzt.

Nach mehreren Versuchen, dies zu beheben, habe ich aufgegeben und versucht, Qiscus zu kontaktieren. Und sie veröffentlichen eine neue Version, die diese Änderung des Pending Intent-Verhaltens handhabt. Wenn also jemand Qiscus verwendet und diesen Fehler erhält, können Sie das neueste Tag verwenden

https://github.com/qiscus/qiscus-sdk-android/releases/tag/1.3.35

Benutzeravatar von Codemaker
Codemacher

Dies könnte das Problem mit der Bibliotheksversion sein. Wenn Sie Bibliotheken älterer Versionen in Ihrem Projekt haben, müssen Sie es auf die neueste Version aktualisieren.

Aktualisieren Sie also die Version der Work-Laufzeit und der Firebase-Messaging-Bibliothek wie folgt:

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'
    ...
}

Stellen Sie außerdem sicher, dass der ausstehende Intent-Code in etwa so lautet:

PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);

Benutzeravatar von Dmitriy Miyai
Dmitri Michai

Wenn Sie den WorkManager in Ihrem Projekt verwenden, aktualisieren Sie ihn auf den neuesten Stand. Wenn Sie dies nicht tun, aktualisieren Sie alle Ihre Firebase-Bibliotheken und Google-Bibliotheken auf die neueste Version. Ich hatte das gleiche Problem und aktualisierte Bibliotheken nacheinander. Und ich fand diese Aktualisierung com.google.android.gms:play-services-ads bis spätestens löste das Problem

1436420cookie-checkDas Targeting von S+ (Version 31 und höher) erfordert, dass einer von FLAG_IMMUTABLE oder FLAG_MUTABLE angegeben wird, wenn ein PendingIntent, On AlarmPingSender, erstellt wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy