web-dev-qa-db-ja.com

ビデオ終了のリスナー(またはハンドラー)

リモート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(); 
        }

アクティビティが呼び出されると、ビデオは正常に動作しますが、ビデオが終了したら、再生されますが、再生されません。

39
Rui Gonçalves

探しているようです

_setOnCompletionListener(MediaPlayer.OnCompletionListener l)
_

より詳細な説明を見つけることができます こちら

編集

This は、VideoViewMediaController、およびsetOnCompletionListener()を使用して、完了後に再生が呼び出されるソリューションを示しています。

42

ここに私の作業コードの塊があります:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        {           
            public void onCompletion(MediaPlayer mp) 
            {
                // Do whatever u need to do here

            }           
        });   
19
Imon
        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を再度呼び出しても正常に動作しているようです。

15
Brennon Reid

onCompletionリスナーで、videoView.start()を使用してみてください。 mp.start()の代わりに;

1
rahil008

メインスレッドでプレーヤーを使用していることを確認してください。コールバックはメインスレッドでのみ機能するようです。

0
n0sferat0k