OR博客
MediaController显示的时候返回键无效
苗锦洲
创建于:2020-08-10 12:59:51
0
34
367
0
最近在开发APP的时候涉及到视频播放,用的自带的VideoView和MediaController实现的,不过发现一个小问题,当底部的MediaController显示的时候返回键无效,试了重写onBackPress、dispatchKeyEvent等,返回键按下的时候没有一个被触发,百度基本找不到这种问题,大部分都是自定义控制条了,随后去stackoverflow上搜了一下,还是有好多一样问题的,不过上面的回答我都试了,基本都是重写dispatchKeyEvent、onBackPress等,我这边触发不了这几个方法,所以都不行。

最近在开发 APP 的时候涉及到视频播放,用的自带的 VideoView 和 MediaController 实现的,不过发现一个小问题,当底部的 MediaController 显示的时候返回键无效,试了重写 onBackPress、dispatchKeyEvent 等,返回键按下的时候没有一个被触发,百度基本找不到这种问题,大部分都是自定义控制条了,随后去 stackoverflow 上搜了一下,还是有好多一样问题的,不过上面的回答我都试了,基本都是重写 dispatchKeyEvent、onBackPress 等,我这边触发不了这几个方法,所以都不行。

问题描述

最近在开发 APP 的时候涉及到视频播放,用的自带的 VideoView 和 MediaController 实现的,不过发现一个小问题,当底部的 MediaController 显示的时候返回键无效,试了重写 onBackPress、dispatchKeyEvent 等,返回键按下的时候没有一个被触发,百度基本找不到这种问题,大部分都是自定义控制条了,随后去 stackoverflow 上搜了一下,还是有好多一样问题的,不过上面的回答我都试了,基本都是重写 dispatchKeyEvent、onBackPress 等,我这边触发不了这几个方法,所以都不行。

可以一直显示的 MyMediaController

默认的 MediaController 会自动隐藏,重写 show 方法就行了

inner class MyMediaController(context: Context) : MediaController(context) { override fun show(timeout: Int) { super.show(0) } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { Log.d(TAG, "onKeyDown") return super.onKeyDown(keyCode, event) } override fun dispatchKeyShortcutEvent(event: KeyEvent?): Boolean { Log.d(TAG, "dispatchKeyShortcutEvent") return super.dispatchKeyShortcutEvent(event) } override fun dispatchKeyEventPreIme(event: KeyEvent?): Boolean { Log.d(TAG, "dispatchKeyEventPreIme") return super.dispatchKeyEventPreIme(event) } override fun dispatchKeyEvent(event: KeyEvent?): Boolean { Log.d(TAG, "dispatchKeyEvent") return if (event?.keyCode == KeyEvent.KEYCODE_BACK) { hide() finish() true } else super.dispatchKeyEvent(event) } }

暂定的解决方法

如果视频大于 2s 就在第一次播放后的第二秒隐藏 MediaController,然后点击视频切换手动显示/隐藏

[========]

参考链接

android - Make MediaController show without hide - Stack Overflow
CSDN 上也有一个跟 Stack Overflow 一样的,只不过是翻译过来的

评论
楼主暂时不想被别人评论哦~