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 controls are present for a few seconds. Hitting the back button while they are visible hides the video controls. Is there a way to ignore that function and do the next back action as if the video controls weren't visible?
The reason I ask is if I really do want to go back, I must hit the back button twice; once to hide the controls and second to actually go back
Based on the source code, this should work:
- Extend
MediaController
(for the purposes of this answer, call itRonnieMediaController
) - Override
dispatchKeyEvent()
inRonnieMediaController
- Before chaining to the superclass, check for
KeyEvent.KEYCODE_BACK
, and if that is encountered, tell your activity tofinish()
- Use
RonnieMediaController
instead ofMediaController
with yourVideoView
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.
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();
}
来源:https://stackoverflow.com/questions/6051825/android-back-button-and-mediacontroller