VideoView中的后退按钮问题

ben*_*eel 7 android back android-videoview

按下后,我很难让后退按钮实际完成我的活动.我正在运行一个非常简单的视频,使用progressdialog来显示加载对话框和onpreparedlistener等等简单的东西.无论如何,目前当我按下后退按钮时,它将取消progressdialog,并留下黑屏,然后再次按下,progressdialog重新启动!然后当我再次单击后退按钮时,它会显示一个警告对话框,"视频无法播放".很烦人.谢谢你的帮助.

public class VideoActivity extends Activity {

    private VideoView mVideoView;

    private static ProgressDialog progressdialog;
    private String path;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoview);


        progressdialog = ProgressDialog.show(this, "", " Video Loading...", true);
        progressdialog.setCancelable(true);

        mVideoView = (VideoView) findViewById(R.id.surface_view);
        mVideoView.setMediaController(new MediaController(this));
        Bundle b = this.getIntent().getExtras();
        path = b.getString("path");
        mVideoView.setVideoURI(Uri.parse(path));


        mVideoView.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer mp) {
                progressdialog.dismiss();
                mVideoView.requestFocus();
                mVideoView.start();

            }
        });

    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();

        super.finish();

    }

}
Run Code Online (Sandbox Code Playgroud)

Ser*_*Him 15

您可以简单地写:(无需为MediaController创建新类)

mVideoView.setMediaController(new MediaController(this){
        public boolean dispatchKeyEvent(KeyEvent event)
        {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
                ((Activity) getContext()).finish();

            return super.dispatchKeyEvent(event);
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 看起来VideoView使用ACTION_DOWN事件,因此ACTION_UP永远不会触发dispatchKeyEvent().这可以通过在ACTION_DOWN上为KEYCODE_BACK返回`false`而不是调用super来轻松解决.(但请确保允许所有其他KeyCodes调用超级!) (4认同)