Reputation: 428
I want to close a VideoView when I press the back button and the video is playing.
Here my code:
public class MainActivity extends AppCompatActivity {
public Integer[] mVideo = {
R.raw.clesella, R.raw.simonino,
R.raw.ennio, R.raw.zip,
R.raw.pippo, R.raw.monituri
};
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new VideoAdapter(this));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final VideoView mVideoView2 = (VideoView) findViewById(R.id.video);
String uriPath = "android.resource://"+ getPackageName()+"/"+mVideo[position];
Uri uri2 = Uri.parse(uriPath);
mVideoView2.setVideoURI(uri2);
mVideoView2.requestFocus();
mVideoView2.setVisibility(view.VISIBLE);
gridview.setVisibility(view.GONE);
mVideoView2.start();
mVideoView2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
//write your code after complete video play
mVideoView2.setVisibility(View.GONE);
gridview.setVisibility(View.VISIBLE);
}
});
mVideoView2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
if (mVideoView2.isPlaying()) {
mVideoView2.pause();
return false;
}
else {
mVideoView2.start();
return false;
}
}
});
}
});
}
}
As you can see, I take videos from the raw folder and I fill in a GridView. When I tap on the item, the video starts. I want to make the VideoView GONE and the GridView visible like I did in setOnCompletetionListener but when the video is playing and I press the back button.
Upvotes: 3
Views: 1782
Reputation: 37
here check this answer it worked for me and I bet it would work for you.
So the idea is to release mediaController on the onPreparedListener After that you can call this dispatchKeyEvent and check for KEYCODE_BACK. It will be done this way.
Upvotes: 0
Reputation: 1450
@Override
public void onBackPressed() {
if (mVideoView2.isPlaying()) {
mVideoView2.setVisibility(View.GONE);
gridview.setVisibility(View.VISIBLE);
} else {
super.onBackPressed();
}
}
Upvotes: 0
Reputation: 37404
make your mVideoView2
and gridview
global to your class as shown and plus you don't create anonymous new MediaPlayer.OnCompletionListener()
on every click, just create a global listener and apply it .
class XY extends ..{
GridView gridview;
VideoView mVideoView2
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new VideoAdapter(this));
mVideoView2 = (VideoView) findViewById(R.id.video);
mVideoView2.setOnCompletionListener(listner);
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// other code to play and listen
}
}
@Override
public void onBackPressed() {
if(videoView.isPlaying()){ // check if video is playing then hide views
mVideoView2.setVisibility(View.GONE);
gridview.setVisibility(View.VISIBLE);
}else{
super.onBackPressed();
}
}
MediaPlayer.OnCompletionListener listner =
new new MediaPlayer.OnCompletionListener(){
//... add the code here
}
}
Upvotes: 2