Android - VideoView需要按两次BACK才能退出解决方法

 从Android back button and MediaController - Stack Overflow得到启发,开始是个秀才认字认半边,没有把文章和回复看全,然后高版本的Android还是没有解决。后来看到以下回复:

The previous solutions no longer work with Android Pie +, you must instead :

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        mediaController.addOnUnhandledKeyEventListener((v, event) -> {
            //Handle BACK button
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
            {
                mediaController.hide(); //Hide mediaController,according to your needs, you can also called here onBackPressed() or finish() 
            }
            return true;
        });
    }

豁然开朗,终于找到了最终原因,把此代码加入mediaController后成功修复。

原理:VideoView设置的MediaController会阻挡返回键,低版本的Android在dispatchKeyEvent中处理,高版本的Android直接未处理丢弃了,需要在addOnUnhandledKeyEventListener处理,所以把所有代码添加后,解决后的代码如下:


        MediaController mediaController = new MediaController(this){
            public boolean dispatchKeyEvent(KeyEvent event)
            {
                if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                    if (mVideoView.isPlaying()) {
                        mVideoView.stopPlayback();
                    }
                    DyTaskCaseActivity.this.finish();// ((Activity) getContext()).finish();
                }
                return super.dispatchKeyEvent(event);
            }
        };
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            mediaController.addOnUnhandledKeyEventListener((v, event) -> {
                //Handle BACK button
                if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
                {
                    mediaController.hide(); //Hide mediaController,according to your needs, you can also called here onBackPressed() or finish()
//                    onBackPressed();
                    if (mVideoView.isPlaying()) {
                        mVideoView.stopPlayback();
                    }
                    DyTaskCaseActivity.this.finish();
                }
                return true;
            });
        }
        mVideoView.setMediaController(mediaController);

相关推荐

  1. Android - VideoView需要BACK退出解决方法

    2024-04-12 16:06:08       42 阅读
  2. 解决QT QMessageBox 弹出需点击关闭问题

    2024-04-12 16:06:08       33 阅读
  3. bash关闭tab显示关闭tab显示隐藏文件

    2024-04-12 16:06:08       45 阅读
  4. Android 音视频开发 - VideoView

    2024-04-12 16:06:08       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 16:06:08       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 16:06:08       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 16:06:08       87 阅读
  4. Python语言-面向对象

    2024-04-12 16:06:08       96 阅读

热门阅读

  1. Android MediaPlayer 深入分析与实践

    2024-04-12 16:06:08       35 阅读
  2. Linux输出输入重定向

    2024-04-12 16:06:08       37 阅读
  3. 运维面试题

    2024-04-12 16:06:08       27 阅读
  4. 02独立按键计数

    2024-04-12 16:06:08       32 阅读
  5. MEF [ImportMany]

    2024-04-12 16:06:08       42 阅读
  6. 《C缺陷和陷阱》-笔记(8)

    2024-04-12 16:06:08       34 阅读
  7. 蓝桥杯2020年第十一届省赛 C&C++ 研究生组2.0

    2024-04-12 16:06:08       37 阅读
  8. mysql学习笔记

    2024-04-12 16:06:08       32 阅读