问题描述
我已尝试尽可能缩小代码范围以识别问题(尽管可能遗漏了一些部分)但基本上我遇到了 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 (将#修改为@)