La orientación a S+ (versión 31 y superior) requiere que se especifique uno de FLAG_IMMUTABLE o FLAG_MUTABLE al crear un PendingIntent, On AlarmPingSender

5 minutos de lectura

Avatar de usuario de Joseph Sanjaya
jose sanjaya

Problema

La orientación a S+ (versión 31 y superior) requiere que se especifique uno de FLAG_IMMUTABLE o FLAG_MUTABLE al crear un PendingIntent. Lo obtuve después de actualizar el SDK de destino a 31. El error siempre viene después de AlarmPingSender. Pero no conozco ninguna clase que haya usado 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)

Lo que ya hice

  • Actualice WorkManager a 2.7.0
  • configure AllProject para forzar el uso de WorkManager a 2.7.0
  • cambie todos los PendingIntent existentes para usar FLAG_IMMUTABLE
  • hay un código antiguo que todavía usa gcm y lo deshabilita
  • Actualización de todo el paquete de Firebase (algunos dijeron que se debe a una versión posterior de análisis)

Biblioteca utilizada

  • una señal
  • quisco
  • base de fuego
  • administrador de trabajo

  • El mensaje de error dice que su error se debe a org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)que parece relacionado con cualquier biblioteca MQTT que esté utilizando.

    – ianhanniballake

    31 de octubre de 2021 a las 4:56

  • sí, yo también lo creo, pero no puedo averiguar qué biblioteca usó MQTT, supongo que es Qiscus, pero traté de actualizar a la última versión, pero el problema persiste.

    – Joseph Sanjaya

    31 de octubre de 2021 a las 7:54

  • Puedes revisar Escaneo de compilación de Gradle para ver qué dependencia extrae la biblioteca Eclipse Paho

    – Lubos Mudrak

    31 oct 2021 a las 9:29

  • Creo que este código github.com/eclipse/paho.mqtt.android/blob/master/… (línea 76) debe actualizarse para cumplir con las nuevas restricciones de Android. github.com/eclipse/paho.mqtt.android/issues/465

    – Casio Landim

    24 de enero a las 15:13


  • Simplemente actualice la versión de su biblioteca de Firebase Messaging a la última versión (23 o superior) y realice los cambios necesarios y listo. Solucionará ese problema. Pero sí, agregue ese FLAG_IMMUTABLE a su indicador PendingIntent también en el código de la aplicación.

    – Harpreet

    16 de noviembre a las 13:56

Agregue lo siguiente a su build.gradle(app) dependencias

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

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

Avatar de usuario de Al-Amin
Al-Amin

Solución posible

Actualice Google Analytics a Firebase Analytics. Espero que resuelva sus problemas. También actualice toda la biblioteca que está usando.

Para mí, las siguientes soluciones resuelven el problema.

Agregar PendingIntent.FLAG_IMMUTABLE a tus intentos pendientes.

Aquí hay un ejemplo –

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

Para mas información sigue esté link –
https://developer.android.com/reference/android/app/PendingIntent#FLAG_IMMUTABLE

  • Ya lo probé, pero el problema persiste.

    – Joseph Sanjaya

    31 de octubre de 2021 a las 7:54

  • Actualizar la biblioteca de Firebase resolvió el problema por mí.

    – Paweł

    16 de noviembre de 2021 a las 13:23

  • ¿Cómo actualizar Google Analytics a Firebase Analytics?

    – Benazir Sh

    8 de febrero a las 15:36

  • Solo una nota para las personas que usan PendingIntent para invocar un método de una biblioteca de terceros… Puede emitir múltiples indicadores en el cuarto argumento usando el operador “o” en Kotlin o “|” operador en Java.

    – varun

    15 oct a las 14:11


Tuve este bloqueo pero no hay bibliotecas de terceros. Agregar esta importación con la última versión solucionará el bloqueo.

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

  • Funciona para mi. En mi caso cambió a: implementación (“androidx.work:work-runtime-ktx:2.7.1”)

    – Cubo

    26 de enero a las 17:09

Además de las respuestas de otros, cambié:

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

a :

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

y está funcionando ahora.

Después de varios intentos de arreglar esto, me di por vencido y traté de contactar a Qiscus. Y lanzan una nueva versión que maneja este cambio de comportamiento de Intención pendiente. Entonces, si alguien usa Qiscus y recibe este error, puede usar la última etiqueta

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

Avatar de usuario de Codemaker
codificador

Este podría ser el problema con la versión de la biblioteca. Si tiene bibliotecas de versiones anteriores en su proyecto, debe actualizarlas a la última versión.

Por lo tanto, actualice la versión de la biblioteca de mensajería de Work Runtime y Firebase de la siguiente manera:

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

Además, asegúrese de que el código de intención pendiente sea algo como esto,

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

Avatar de usuario de Dmitriy Miyai
Dmitri Miyai

Si usa WorkManager en su proyecto, actualícelo a la última versión. Si no lo hace, actualice todas sus bibliotecas de Firebase y Google a la última versión. Enfrenté el mismo problema y estaba actualizando las bibliotecas una por una. Y encontré que actualizando com.google.android.gms:play-services-ads a lo ultimo solucionado el problema

¿Ha sido útil esta solución?