Das Targeting von S+ (Version 31 und höher) erfordert die Angabe von FLAG_IMMUTABLE oder FLAG_MUTABLE

Lesezeit: 5 Minuten

Benutzeravatar von Mouaad Abdelghafour AITALI
Mouaad Abdelghafour AITALI

App stürzt zur Laufzeit mit folgendem Fehler ab:

java.lang.IllegalArgumentException: maa.abc: Targeting S+ (Version 31 und höher) erfordert, dass FLAG_IMMUTABLE oder FLAG_MUTABLE beim Erstellen eines PendingIntent angegeben wird. Ziehen Sie unbedingt die Verwendung von FLAG_IMMUTABLE in Betracht, verwenden Sie FLAG_MUTABLE nur, wenn einige Funktionen davon abhängen, dass PendingIntent veränderbar ist, z. B. wenn es mit Inline-Antworten oder Blasen verwendet werden muss. bei android.app.PendingIntent.checkFlags(PendingIntent.java:375) bei android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645) bei android.app.PendingIntent.getBroadcast(PendingIntent.java:632) bei com.google. android.exoplayer2.ui.PlayerNotificationManager.createBroadcastIntent(PlayerNotificationManager.java:1373) unter com.google.android.exoplayer2.ui.PlayerNotificationManager.createPlaybackActions(PlayerNotificationManager.java:1329) unter com.google.android.exoplayer2.ui.PlayerNotificationManager. (PlayerNotificationManager.java:643) unter com.google.android.exoplayer2.ui.PlayerNotificationManager.(PlayerNotificationManager.java:529) unter com.google.android.exoplayer2.ui.PlayerNotificationManager.createWithNotificationChannel(PlayerNotificationManager.java:456) unter com .google.android.exoplayer2.ui.PlayerNotificationManager.createWithNotificationChannel(PlayerNotificationManager.java:417)

Ich habe alle verfügbaren Lösungen ausprobiert, aber die App stürzt immer noch auf Android 12 ab.

 @Nullable
 @Override
 public PendingIntent createCurrentContentIntent(@NonNull Player player) {
        Intent intent = new Intent(service, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                        Intent.FLAG_ACTIVITY_SINGLE_TOP |
                        Intent.FLAG_ACTIVITY_NEW_TASK);
        return PendingIntent.getActivity(service, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

 }

Wenn Sie Java oder React-Native verwenden, fügen Sie dies in app/build.gradle ein

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

Wenn Sie Kotlin verwenden, verwenden Sie dies

dependencies {
  // ...
  implementation 'androidx.work:work-runtime-ktx:2.7.0'
}

und wenn jemand immer noch mit dem Absturzproblem für Android 12 konfrontiert ist, stellen Sie sicher, dass Sie Folgendes in AndroidMenifest.xml hinzufügen

 <activity 
   ...
   android:exported="true" // in most cases it is true but based on requirements it can be false also   
>   


   // If using react-native push notifications then make sure to add into it also

 <receiver   
android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver" android:exported="true">
 
   //  Similarly
 
 <service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService" android:exported="true">

  • Auch nach dem Hinzufügen von FLAG_IMMUTABLE und der Abhängigkeit erhalte ich auf einigen Samsung-Geräten immer noch den Fehler: Galaxy Note20 5G, Galaxy S20 FE 5G und andere.

    – John Doe

    6. Mai um 12:27 Uhr


  • Ja, ich habe es auch auf Samsung- und HTC-Geräten gefunden. Ich werde Lösungen posten, sobald ich es gelöst habe

    – HaryanviEntwickler

    7. Mai um 18:05 Uhr

  • Bitte werfen Sie einen Blick auf diesen Kommentar github.com/facebook/react-native/issues/…

    – Hamza Hm

    19. Mai um 16:24 Uhr

  • Danke @HamzaHmem funktioniert das für dich? Hast du versucht?

    – HaryanviEntwickler

    27. Mai um 12:41 Uhr

  • @HaryanviDeveloper Ich habe Ihre Lösung ausprobiert und sie hat funktioniert. Es gibt jedoch einen Fix, der vom React-Native-Core-Team selbst entwickelt wurde, aber mit der Version 0.69 veröffentlicht wird.

    – Hamza Hm

    29. Mai um 9:46 Uhr

Benutzeravatar von Saksham Pruthi
Saksham Pruthi

Überprüfen und aktualisieren Sie die Abhängigkeitsversion von Exoplayer auf die neueste

android.app.PendingIntent.getBroadcast() zuvor verwendet, um zurückzukehren

@Nullable
@Override
private static PendingIntent createBroadcastIntent(
    String action, Context context, int instanceId) {
    Intent intent = new Intent(action).setPackage(context.getPackageName());
    intent.putExtra(EXTRA_INSTANCE_ID, instanceId);
    return PendingIntent.getBroadcast(
        context, instanceId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  }

Wenn Sie genau hinsehen, fehlt PendingIntent.FLAG_IMMUTABLE hier im obigen Snippet

Es wurde jetzt aktualisiert, um Folgendes zurückzugeben

@Nullable
@Override
private static PendingIntent createBroadcastIntent(
      String action, Context context, int instanceId) {
    Intent intent = new Intent(action).setPackage(context.getPackageName());
    intent.putExtra(EXTRA_INSTANCE_ID, instanceId);

    int pendingFlags;
    if (Util.SDK_INT >= 23) {
      pendingFlags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
    } else {
      pendingFlags = PendingIntent.FLAG_UPDATE_CURRENT;
    }

    return PendingIntent.getBroadcast(context, instanceId, intent, pendingFlags);
  }

  • Cool, aber warum sollten wir die Version 23 und höher überprüfen, wenn die Fehlermeldung „Targeting S+ (Version 31 and above)“ lautet?

    – Tarek

    8. Februar um 6:49 Uhr

  • @Tarek PendingIntent.FLAG_IMMUTABLE ist in API unter 23 nicht vorhanden. Die Fehlermeldung ist darauf zurückzuführen, dass Android es obligatorisch gemacht hat, PendingIntent.FLAG_IMMUTABLE oder PendingIntent.FLAG_IMUTABLE zu allen ausstehenden Absichten ab API 31(S) hinzuzufügen

    – Saksham Pruthi

    8. Februar um 14:15 Uhr

  • Beachten Sie, dass die Verwendung von Util.SDK_INT Konstanten sind für die meisten Projekte möglicherweise nicht sehr portabel und würden daher die Verwendung des Android “offiziell” empfehlen Build.VERSION.SDK_INT Varianten.

    – JWL

    5. Juli um 8:30 Uhr

In meinem Fall für Lese-Tags mit dem Vordergrund-Liefersystem funktioniert es.

Wenn Sie Ihre App in Android 12 ausführen lassen, verwenden Sie Folgendes:

PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
   pendingIntent = PendingIntent.getActivity(this,
          0, new Intent(this, getClass()).addFlags(
   Intent.FLAG_ACTIVITY_SINGLE_TOP), 
   PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
}else {
   pendingIntent = PendingIntent.getActivity(this,
      0, new Intent(this, getClass()).addFlags(
   Intent.FLAG_ACTIVITY_SINGLE_TOP), 
   PendingIntent.FLAG_UPDATE_CURRENT);
}

Lösung für Kotlin, fügen Sie einfach dieses Flag hinzu, wenn Sie API M verwenden

val flags = when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE
            else -> FLAG_UPDATE_CURRENT
        }
val toastPendingIntent = PendingIntent.getBroadcast(context, 0, providerIntent, flags)

Ich stehe vor dem gleichen Problem, und wie in den meisten Antworten angegeben, habe ich meine Abhängigkeit wie folgt aktualisiert.

dependencies {
  /* Use either Kotlin or Java dependency as per your project */

  // ...
  /* Android Arch Component Work Manager for Kotlin */
  implementation 'androidx.work:work-runtime-ktx:2.7.0' 


  //...
  /* Android Arch Component Work Manager for Java */
  def work_version = "2.7.1"
  implementation "androidx.work:work-runtime:$work_version"
  // optional - Test helpers
  androidTestImplementation "androidx.work:work-testing:$work_version"
}

Aber das Hinzufügen von nur dem oben Genannten hat mein Problem nicht gelöst und die App stürzte immer noch ab.

Also habe ich Android Lint: Missing Pending Intent Mutability ausgeschaltet. Finden Sie die folgenden Schritte zum Ausschalten.

Ausstehende Intent-Mutabilität ausschalten

Gehen Sie zur Suchoption und suchen Sie nach “PendingIntent”. Sie erhalten ein Fenster wie unten gezeigt.

Suchfenster von Android Studio

Schalten Sie Android Lint: Missing Pending Intent Mutability aus und Sie können loslegen.

Ajays Benutzeravatar
Ajay

Ich habe dies gelöst, indem ich unten in …android/app/build.gradle hinzugefügt habe

implementation 'androidx.work:work-runtime-ktx:2.8.0-alpha01'

https://github.com/react-native-maps/react-native-maps/issues/4083#issue-1119280606

Wenn die Futter Bibliothek Ihr Problem erzeugt, können Sie sie nach dem Aktualisieren der SDK-Version nicht mehr verwenden. Sie können es leicht durch ersetzen Chucker (Chucks Gabel): https://github.com/jgilfelt/chuck/issues/101#issuecomment-869119599.

1436070cookie-checkDas Targeting von S+ (Version 31 und höher) erfordert die Angabe von FLAG_IMMUTABLE oder FLAG_MUTABLE

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

Privacy policy