我正在为Amazon平台创建一个视频应用程序。我试图启用遥控器上的“倒带和快速前进”控件。但这款应用程序似乎没有看到这个动作。
class VideoActivity : FragmentActivity() {
private var mediaSession: MediaSessionCompat? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_video)
initMediaSession()
supportFragmentManager.beginTransaction()
.replace(R.id.container, VideoFragment().apply { arguments = intent.extras })
.commit()
}
override fun onDestroy() {
super.onDestroy()
mediaSession?.isActive = false
mediaSession?.release()
}
private fun initMediaSession() {
mediaSession = MediaSessionCompat(applicationContext, "VideoTag")
mediaSession?.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
val state = PlaybackStateCompat.Builder()
.setActions(
PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PAUSE or PlaybackStateCompat.ACTION_PLAY_PAUSE or PlaybackStateCompat.ACTION_REWIND
or PlaybackStateCompat.ACTION_SKIP_TO_NEXT or PlaybackStateCompat.ACTION_SEEK_TO
// PlaybackStateCompat.ACTION_PLAY_PAUSE or
// PlaybackStateCompat.ACTION_FAST_FORWARD
// or PlaybackStateCompat.ACTION_REWIND or
// PlaybackStateCompat.ACTION_PLAY or
// PlaybackStateCompat.ACTION_PAUSE
)
.setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f)
.build()
mediaSession?.setPlaybackState(state)
mediaSession?.setCallback(object : MediaSessionCompat.Callback() {
override fun onCustomAction(action: String?, extras: Bundle?) {
super.onCustomAction(action, extras)
}
override fun onSeekTo(pos: Long) {
super.onSeekTo(pos)
}
override fun onSkipToNext() {
super.onSkipToNext()
}
override fun onFastForward() {
super.onFastForward()
}
override fun onPlay() {
super.onPlay()
}
override fun onPause() {
super.onPause()
}
})
mediaSession?.isActive = true
val controll = MediaControllerCompat(this, mediaSession!!)
MediaControllerCompat.setMediaController(this, controll)
}播放/暂停工作,它会切换播放机的状态,但我不能通过媒体会话回调来拦截此事件。我做错什么了?
发布于 2022-10-24 13:50:11
我找到了解决办法。实际上是解决方案。媒体会话的问题是播放状态。
mediaSession.setPlaybackState(stateBuilder.setState(PlaybackStateCompat.STATE_PLAYING, PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, 1).build());它每次都需要更新其状态。
但我也发现我不需要任何媒体会话,因为PlaybackTransportControlGlue处理它,但不把它作为一个操作来分派。因此,我重写了onKey回调的PlaybackTransportControlGlue,并自己处理它
override fun onKey(v: View?, keyCode: Int, event: KeyEvent?): Boolean {
return when {
event?.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD -> {
fastForward()
true
}
event?.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_MEDIA_REWIND -> {
rewind()
true
}
else -> super.onKey(v, keyCode, event)
}
}https://stackoverflow.com/questions/74153936
复制相似问题