MediaSessionCompat:Targeting S+ (Version 31 und höher) erfordert die Angabe von FLAG_IMMUTABLE oder FLAG_MUTABLE beim ErJava

Java-Forum
Anonymous
 MediaSessionCompat:Targeting S+ (Version 31 und höher) erfordert die Angabe von FLAG_IMMUTABLE oder FLAG_MUTABLE beim Er

Post by Anonymous »

Ich versuche, meine Anwendung auf Android SDK 31 zu aktualisieren, habe jedoch ein Problem mit MediaSessionCompat.
Ich habe einen MediaService, der MediaBrowserServiceCompat() und die Methode onCreate erweitert Von diesem Dienst initialisiere ich die MediaSessionCompat.
override fun onCreate() {
super.onCreate()
mediaSession = MediaSessionCompat(this, TAG).apply {
setCallback(mediaSessionCallback)
isActive = true
}
...

Aber ich habe den folgenden Fehler
java.lang.RuntimeException: Unable to create service com.radio.core.service.MediaService: java.lang.IllegalArgumentException: com.xxx.xxx: 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.ActivityThread.handleCreateService(ActivityThread.java:4498)
at android.app.ActivityThread.access$1500(ActivityThread.java:250)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2064)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7829)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:982)
Caused by: java.lang.IllegalArgumentException: com.xxx.xxx: 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 android.support.v4.media.session.MediaSessionCompat.(MediaSessionCompat.java:567)
at android.support.v4.media.session.MediaSessionCompat.(MediaSessionCompat.java:537)
at android.support.v4.media.session.MediaSessionCompat.(MediaSessionCompat.java:501)
at android.support.v4.media.session.MediaSessionCompat.(MediaSessionCompat.java:475)
at com.radio.core.service.MediaService.onCreate(MediaService.kt:63)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:4485)
... 9 more

Ich verwende die neueste Version der Medienbibliothek („androidx.media:media:1.4.0“), die diese Anforderung des Android „S“ erfüllen kann. . Wie man in der Klasse MediaSessionCompact.java sehen kann.

// TODO(b/182513352): Use PendingIntent.FLAG_MUTABLE instead from S.
/**
* @hide
*/
@RestrictTo(LIBRARY)
public static final int PENDING_INTENT_FLAG_MUTABLE =
Build.VERSION.CODENAME.equals("S") ? 0x02000000 : 0;

...

if (mbrComponent != null && mbrIntent == null) {
// construct a PendingIntent for the media button
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
// the associated intent will be handled by the component being registered
mediaButtonIntent.setComponent(mbrComponent);
mbrIntent = PendingIntent.getBroadcast(context,
0/* requestCode, ignored */, mediaButtonIntent,
PENDING_INTENT_FLAG_MUTABLE);
}


Quellcode, der das Problem demonstriert – https://github.com/adelinolobao/issue-m ... ion-compat
Habt ihr welchen? Idee, wie kann ich den Fehler beheben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post