46

URL を介してリモート Web サーバーからビデオを再生することをテストするために、次のコードを実装しました。

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(); 
        }

アクティビティが呼び出されたとき、ビデオは正常に動作しますが、ビデオが終了したら、もう一度再生してもらいたいのですが、発生していません。

4

5 に答える 5

47

探しているようです

setOnCompletionListener(MediaPlayer.OnCompletionListener l)

より詳細な説明は、ここで見つけることができます

編集

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

于 2009-12-04T15:54:16.643 に答える
21

ここに私のコードの作業チャンクがあります:

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

            }           
        });   
于 2011-04-03T18:00:24.520 に答える
18
        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 を再度呼び出すと正常に機能しているようです。

于 2013-01-28T09:51:09.633 に答える
1

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

于 2011-04-11T13:19:19.083 に答える
0

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

于 2013-10-01T16:06:50.510 に答える