如果通知 setMediaSession,Android 11 服务不会解除绑定/销毁

问题描述

我已尝试尽可能缩小代码范围以识别问题(尽管可能遗漏了一些部分)但基本上我遇到了 Android 11 或更高版本出现的问题,其中 MediabrowserServiceCompat 没有得到使用将在其他版本中销毁它的相同代码销毁。我已将其范围缩小到通知并设置 MediaSession 令牌。如果我设置它,它不会在调用 stopSelf() 时销毁,如果我不设置它,它会清除。我还注意到它会绑定到服务(如果设置了 MediaSession 令牌),但我认为没有办法强制它解除绑定。下面提供的示例代码

class MediaPlayerService : MediabrowserServiceCompat()  {
    private val mediaSession by lazy { MediaSessionCompat(this,"MusicService") }
    private val mediaPlayerNotification by lazy { MediaPlayerNotification(this) }
    
    override fun onCreate() {
        super.onCreate()
        sessionToken = mediaSession.sessionToken
    }

    //Not called on Android 11
    override fun onDestroy() {
        super.onDestroy()
    }
    
    playerStarted(){
        mediaPlayerNotification.createNotification()
    }


    fun playerStopped() {
        stopSelf()
    }

}



const val mId = 101

class MediaPlayerNotification(service: MediaPlayerService) : broadcastReceiver() {
    private val notificationmanager: notificationmanager = service.getSystemService(context.NOTIFICATION_SERVICE) as notificationmanager
    private val notificationBuilder by lazy {
        val filter = IntentFilter()
        filter.addAction(NOTIFICATION_ACTION_SKIP)
        service.registerReceiver(this,filter)


        NotificationCompat.Builder(service,MEDIA_PLAYER_CHANNEL)
                .setStyle(androidx.media.app.NotificationCompat.MediaStyle()
                        .setShowActionsInCompactView(0)
                        .setMediaSession(service.sessionToken))// If I comment this line,the service will destory when `stopSelf()` is called 
                .setSmallIcon(R.drawable.img_logo_white)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) // Show controls on lock screen even when user hides sensitive content.
                .addAction(skipAction)
    }

    private var notification = notificationBuilder.build()

    fun createNotification() {
        notification = notificationBuilder
                .setContentTitle("title")
                .setContentText("text")
                .build()
        notificationmanager.notify(mId,notification)
    }

}


我如何向通知澄清 mediaSession 已结束,以便它从服务中解除绑定(我相信这是我需要走的路)。我似乎也找不到任何关于发生了什么变化以及为什么会在 Android 10 上出现问题的 Android 文档

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)