首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MediaSession的Amazon电视操作系统上,远程媒体按钮不起作用

使用MediaSession的Amazon电视操作系统上,远程媒体按钮不起作用
EN

Stack Overflow用户
提问于 2022-10-21 12:54:45
回答 1查看 31关注 0票数 1

我正在为Amazon平台创建一个视频应用程序。我试图启用遥控器上的“倒带和快速前进”控件。但这款应用程序似乎没有看到这个动作。

代码语言:javascript
复制
    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)
    }

播放/暂停工作,它会切换播放机的状态,但我不能通过媒体会话回调来拦截此事件。我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-24 13:50:11

我找到了解决办法。实际上是解决方案。媒体会话的问题是播放状态。

代码语言:javascript
复制
mediaSession.setPlaybackState(stateBuilder.setState(PlaybackStateCompat.STATE_PLAYING, PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, 1).build());

它每次都需要更新其状态。

但我也发现我不需要任何媒体会话,因为PlaybackTransportControlGlue处理它,但不把它作为一个操作来分派。因此,我重写了onKey回调的PlaybackTransportControlGlue,并自己处理它

代码语言:javascript
复制
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)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74153936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档