Das Targeting von S+ (Version 31 und höher) erfordert die Angabe von FLAG_IMMUTABLE oder FLAG_MUTABLE
Lesezeit: 5 Minuten
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
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
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
Saksham Pruthi
Überprüfen und aktualisieren Sie die Abhängigkeitsversion von Exoplayer auf die neueste
android.app.PendingIntent.getBroadcast() zuvor verwendet, um zurückzukehren
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.
Schalten Sie Android Lint: Missing Pending Intent Mutability aus und Sie können loslegen.
Ajay
Ich habe dies gelöst, indem ich unten in …android/app/build.gradle hinzugefügt habe