筆記Android — PlayerNotificationManager 監聽系統播放器ControlDispatcher方法
4 min readDec 11, 2021
工作需求在播放功能中,需要設定GA Tracking在監聽系統播放器Action,這邊使用了MediaBrowserServiceCompat + PlayerNotificationManager來實踐音頻背景播放需求,另外要監聽系統播放器需要設定ControlDispatcher方法來實踐。
系統播放器其實是一種”Notification”依照這個思路可以確定我們要監聽的設置會在PlayerNotificationManager的方法裡面。如果使用的是自己客制的View那就需要用CustomAction,目前這邊用到的是原生的。
首先New一個PlayerNotificationManager之後設置相關設定
val notificationManager: PlayerNotificationManagernotificationManager = PlayerNotificationManager.createWithNotificationChannel(context, channelId, R.string.notification_channel, R.string.notification_channel_description, notificationId, DescriptionAdapter(mediaController), notificationListener).apply {
setMediaSessionToken(sessionToken)
setSmallIcon(R.drawable.ic_svg_play)
setUseNextAction(true)
setUsePreviousAction(true)
setUsePlayPauseActions(true)
//監聽系統播放器
controlDispatcher
}
ControlDispatcher設定如下:
private val controlDispatcher = object : ControlDispatcher {
override fun dispatchPrepare(player: Player): Boolean {
return false
}
override fun dispatchSetPlayWhenReady(player: Player,
playWhenReady: Boolean): Boolean {
if (playWhenReady) {
//可執行播放事件
} else {
//可執行暫停事件
}
return false
}
override fun dispatchSeekTo(player: Player, windowIndex: Int,
positionMs: Long): Boolean {
return false
}
override fun dispatchPrevious(player: Player): Boolean {
//可執行播放上一首事件
return false
}
override fun dispatchNext(player: Player): Boolean {
//可執行播放下一首事件
return false
}
override fun dispatchRewind(player: Player): Boolean {
return false
}
override fun dispatchFastForward(player: Player): Boolean {
return false
}
override fun dispatchSetRepeatMode(player: Player, repeatMode:
Int): Boolean {
return false
}
override fun dispatchSetShuffleModeEnabled(player: Player,
shuffleModeEnabled: Boolean): Boolean {
return false
}
override fun dispatchStop(player: Player, reset: Boolean):
Boolean {
return false
}
override fun isRewindEnabled(): Boolean {
return false
}
override fun isFastForwardEnabled(): Boolean {
return false
}
}
上面只有用到幾種目前實作到的方法,其他例如快進、倒退等在系統播放器上的按鈕都有相對應的事件可以取得。