リモートWebサーバーからURLを介してビデオの再生をテストするために、次のコードを実装しました。
videoView = (VideoView)this.findViewById(R.id.videoView);
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/Android/movie.mp4"));
videoView.requestFocus();
コードは、Androidエミュレーターでも。
私は今、次のコードを持っています:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.player);
videoView = (VideoView)this.findViewById(R.id.videoView);
playVideo();
// video finish listener
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// not playVideo
// playVideo();
mp.start();
}
});
}
public void playVideo() {
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/Android/movie.mp4"));
videoView.requestFocus();
}
アクティビティが呼び出されると、ビデオは正常に動作しますが、ビデオが終了したら、再生されますが、再生されません。
ここに私の作業コードの塊があります:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
// Do whatever u need to do here
}
});
vidView=(VideoView)findViewById(R.id.vidView);
vidView.setMediaController(null);
vidView.setVideoPath( "/mnt/external_sd/somerandommovie.3gp" );
vidView.start();
vidView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
vidView.start();
}
});
リスナーが起動していることがわかりました。問題はmp.start()が何もしないようだったため、元のオブジェクトでstartを再度呼び出しても正常に動作しているようです。
onCompletionリスナーで、videoView.start()を使用してみてください。 mp.start()の代わりに;
メインスレッドでプレーヤーを使用していることを確認してください。コールバックはメインスレッドでのみ機能するようです。