Wie behebt man die Lint-Warnung „Missing PendingIntent Mutability Flag“ in Android API 30+?

Lesezeit: 4 Minuten

Benutzer-Avatar
Amir Hossein Ghasemi

Sobald ich das Ziel aktualisiert habe SDK zu 30+ (Android R oder höher), eine Fusselwarnung Missing PendingIntent mutability flag erschien auf meiner PendingIntent.FLAG_UPDATE_CURRENT Flag, wenn ich definieren möchte PendingIntent.

Wie soll ich mit diesen Fusseln umgehen, ohne die App-Funktionalität zu beeinträchtigen?

  • stackoverflow.com/questions/70889493/android-12-pending-intent Kann mir jemand bei diesem Problem helfen

    – Cakston MWS

    12. Februar um 7:29 Uhr

Benutzer-Avatar
Yosidroid

Wenn Sie Ihre App in Android 12 ausführen lassen, gibt es ein neues PendingIntent-Mutability-Flag. Wenn Sie nicht möchten, dass Ihr PendingIntent mutiert wird, verwenden Sie

PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        pendingIntent = PendingIntent.getActivity(this,
                0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

    }else {
        pendingIntent = PendingIntent.getActivity(this,
                0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    }

Wenn Sie möchten, dass Ihr PendingIntent mutiert wird, verwenden Sie Folgendes:

PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        pendingIntent = PendingIntent.getActivity(this,
                0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);

    }else {
        pendingIntent = PendingIntent.getActivity(this,
                0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    }

In der Google-Dokumentation heißt es: Erwägen Sie unbedingt die Verwendung von FLAG_IMMUTABLE, verwenden Sie FLAG_MUTABLE nur, wenn einige Funktionen davon abhängen, dass PendingIntent veränderbar ist. Der Wechsel sollte unkompliziert sein. Stellen Sie außerdem sicher, dass Sie die folgende Work Manager-Abhängigkeit hinzufügen, wenn Sie AdMob 20.4.0 oder niedriger in Ihrer App verwenden:

//Work Manager dependency
implementation 'androidx.work:work-runtime:2.7.1'

Beachten Sie, dass die aktuelle Work Manager-Abhängigkeitsversion 2.7.1 ist. Sie können die Version auf die neueste Version aktualisieren, wenn Sie möchten.

  • Müsste es nicht Version S statt M sein?

    – Edelstahlratte

    6. Januar um 22:56 Uhr

  • für die FLAG_MUTABLE ja, sollte es sein S wie es in SDK 31 hinzugefügt wurde, FLAG_INMUTABLE wurde in SDK 23 hinzugefügt, also ist M ok

    – jcesarmobile

    4. Februar um 18:56 Uhr


  • Vielen Dank dafür, löst meine FLAG_MUTABLE-Anforderung an einen Intent, der eine URL dynamisch aus einer ListView in einem Widget lädt.

    – Automat

    15. Februar um 1:59 Uhr

  • Es sollte sicher sein, die neueren Flags auf älteren API-Ebenen zu verwenden, da der Wert inline ist. Ein Flag, das auf der älteren Ebene nicht bekannt ist, sollte seine bitweise Überprüfung der ihm bekannten Flags nicht stören.

    – mtotschnig

    30. April um 11:47 Uhr

  • Gibt es dazu irgendwelche Updates? Ich habe dies mit versucht -alpha04 und immer noch den Fehler erhalten. Ich habe nur 1 PendingIntent für meine Anwendung und kann von diesem Absturz nicht weiterkommen. Können Bibliotheken von Drittanbietern diesen Absturz verursachen?

    – Adam Gardner

    1. Juli 2021 um 21:14 Uhr

  • Ich habe es mit versucht implementation "androidx.work:work-runtime:2.7.0-alpha05". es funktioniert gut mit java.

    – satheesh

    18. August 2021 um 21:12 Uhr


  • Adam, dann ist es sehr wahrscheinlich, dass es eine andere Bibliothek ist, die den Absturz verursacht. Sie können den vollständigen Baum der Abhängigkeiten für Ihr Projekt mit “./gradlew :app:dependencies” (in Linux) anzeigen. Zum Beispiel hängt play-services-ads-lite:20.2.0 von androidx.work:work-runtime:2.1 ab .0 und ich denke, dort liegt dieses Problem (behoben in android.googlesource.com/platform/frameworks/support/+/… )

    – Fattire

    21. August 2021 um 22:54 Uhr

  • @Satheesh, ja – sie sind bis zu 2.7.0.beta-01 in der Quelle, aber es scheint noch nicht im Repository zum Generieren von Builds verfügbar zu sein android.googlesource.com/platform/frameworks/support/+/… siehe auch maven.google.com/web/…

    – Fattire

    21. August 2021 um 23:07 Uhr

  • Ich verwende keine Arbeitsbibliothek und habe sie nicht in build.gradle

    – Benutzer924

    30. September 2021 um 13:47 Uhr

Benutzer-Avatar
Nikunj

Wenn Ihre App zielgerichtet ist Android 12 (targetSdkVersion = 31)und verwendet eine alte Version der Arbeitsmanager direkt ODER von einer der Bibliotheken von Drittanbietern dann müssen Sie aktualisiere es auf den neuesten Stand um es zu lösen.

dependencies {
    def work_version = "2.7.1"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"
}

Benutzer-Avatar
Rehan Khan

Wenn Sie Ihre App in Android 12 ausführen lassen, gibt es ein neues PendingIntent-Mutability-Flag. Wenn Sie nicht möchten, dass Ihr PendingIntent stumm geschaltet wird, verwenden Sie

Java

PendingIntent updatedPendingIntent = PendingIntent.getActivity(
   applicationContext,
   NOTIFICATION_REQUEST_CODE,
   updatedIntent,
   PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT // setting the mutability flag 
)

Kotlin

val updatedPendingIntent = PendingIntent.getActivity(
   applicationContext,
   NOTIFICATION_REQUEST_CODE,
   updatedIntent,
   PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT // setting the mutability flag 
)

Wenn Sie möchten, dass Ihr PendingIntent stummgeschaltet wird, verwenden Sie Folgendes:

Java

PendingIntent updatedPendingIntent = PendingIntent.getActivity(
   applicationContext,
   NOTIFICATION_REQUEST_CODE,
   updatedIntent,
   PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT // setting the mutability flag 
)

Kotlin

val updatedPendingIntent = PendingIntent.getActivity(
   applicationContext,
   NOTIFICATION_REQUEST_CODE,
   updatedIntent,
   PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT // setting the mutability flag 
)

Implementieren Sie zuletzt diese Abhängigkeit

//Work Manager dependency
implementation 'androidx.work:work-runtime:2.7.1'

Benutzer-Avatar
Niklas

In meinem Fall waren es auch Bibliotheken von Drittanbietern, die alte WorkManager-Versionen verwendeten, um die neue Android Work-Version auf alle Abhängigkeiten zu zwingen, diese in Ihrem zu verwenden Wurzel build.gradle-Datei:

allproject {
  project.configurations.all {
    resolutionStrategy {
      force 'androidx.work:work-runtime:2.7.0'
    }
  }
}

1010960cookie-checkWie behebt man die Lint-Warnung „Missing PendingIntent Mutability Flag“ in Android API 30+?

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

Privacy policy