I have a simple Activity to preview a video in FullScreen. The layout of the Activity is:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:fillViewport="true">
<VideoView
android:id="@+id/video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="fitCenter"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_alignParentBottom="true"
<Button android:id="@+id/buttonClose"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@null"
android:textSize="18sp"
android:textColor="@color/white"
android:text="@string/close"/>
</RelativeLayout>
</RelativeLayout>
The relevant Activity code is:
public class VideoFullscreenActivity extends Activity {
private VideoView video;
private Button closeButton;
private MediaController mediaController;
private boolean toClose;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_fullscreen);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
video = (VideoView) findViewById(R.id.video);
closeButton = (Button) findViewById(R.id.buttonClose);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d("VideoPreview", "onClick Close Button");
VideoFullscreenActivity.super.onBackPressed();
}
});
Bundle bundle = getIntent().getParcelableExtra("bundle");
if (bundle != null) {
Uri videoUri = bundle.getParcelable("data");
mediaController = new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
video.setVideoURI(videoUri);
video.requestFocus();
video.start();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
finish();
}
return (super.onOptionsItemSelected(menuItem));
}
@Override
protected void onResume() {
Log.i("VideoPreview", "Resume");
video.resume();
super.onResume();
}
@Override
protected void onPause() {
Log.i("VideoPreview", "Pause");
video.suspend();
super.onPause();
}
@Override
protected void onDestroy() {
Log.i("VideoPreview", "Destroy");
video.stopPlayback();
super.onDestroy();
}
}
When I press the "Close" button the first time, the sequence is:
D/VideoPreview﹕ onClick Close Button
I/VideoPreview﹕ Pause
I/VideoPreview﹕ Resume
I/VideoPreview﹕ Destroy
At this stage, the Activity doesn't close, it restarts and the video starts playing again. To close the Activity, I have to press the "Close" button again.
When I press the "Close" button the second time, the sequence is:
D/VideoPreview﹕ onClick Close Button
I/VideoPreview﹕ Pause
I/VideoPreview﹕ Destroy
Now, the Activity closes.
Some relevant questions that I found on StackOverflow:
- Android - VideoView requires to press BACK twice, in order to exit (adding the onKeyDown function didn't help)
- How to close Landscape VideoView Activity properly? (I have overridden the onDestroy, onResume and onPause methods but that hasn't solved the issue)
Could someone please explain to me what is it that I am doing incorrectly (or failing to understand).
Thanks