I know how to take control of the back button. I have a VideoView
embedded in a FrameLayout
. My question is when the video pops up, the video contr
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;
});
}
You can also have the Activity handle the event:
mVideoView.setMediaController(new MediaController(this){
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
((Activity) getContext()).onBackPressed();
return true;
}
}
return super.dispatchKeyEvent(event);
}
});
Then handle it in your Activity:
@Override
public void onBackPressed() {
// clean up or send result here
finish();
}
Based on the source code, this should work:
MediaController
(for the purposes of this answer, call it RonnieMediaController
)dispatchKeyEvent()
in RonnieMediaController
KeyEvent.KEYCODE_BACK
, and if that is encountered, tell your activity to finish()
RonnieMediaController
instead of MediaController
with your VideoView
Personally, I'd just leave it alone, as with this change your user cannot make a RonnieMediaController
disappear on demand.
You can simply write:
mVideoView.setMediaController(new MediaController(this){
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
((Activity) getContext()).finish();
return super.dispatchKeyEvent(event);
}
});
No need to create new class.