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
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
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'
}
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.
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.
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
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:
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
14364200cookie-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 wirdyes
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