Mediaplayer 加一个OnCompletionListener完成后播放下一个就是了。

解决方案 »

  1.   

    设置了,但是设置后连视频都不能播放了?能帮我看看代码吗?
    package ele.bus.ele;import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;import android.app.Activity;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnBufferingUpdateListener;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.media.MediaPlayer.OnPreparedListener;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.SurfaceView;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;public class ElebusDemActivity extends Activity implements
    OnCompletionListener, Callback, OnBufferingUpdateListener,
    OnPreparedListener {
    /** Called when the activity is first created. */
    private SurfaceView sView;
    private SurfaceHolder hodler;
    private MediaPlayer mediaPlayer;
    private int videoWhith;
    private int videoHeight;
    private List<String> list;
    private int index = 0; @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    mediaPlayer = new MediaPlayer();
    sView = (SurfaceView) findViewById(R.id.surfaceView1);
    // 得到SurfaceHolder对象
    hodler = sView.getHolder();
    // 设置回调函数
    hodler.addCallback(this);
    // 设置风格
    hodler.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    list = new ArrayList<String>();
    String url = Environment.getExternalStorageDirectory()
    .getAbsolutePath() + File.separatorChar + "VideosZip";
    System.out.println(url);
    getFiles(url);
    } private void play(String str) { String path = Environment.getExternalStorageDirectory().getPath()
    + File.separatorChar + "VideosZip1" + File.separator
    + "video.mp4"; // 构建MediaPlayer对象
    try {
    // 设置媒体文件路径
    mediaPlayer.setDataSource(path);
    System.out.println(str);
    // 设置通过SurfaceView来显示画面
    mediaPlayer.setDisplay(hodler);
    // 准备
    mediaPlayer.prepareAsync();
    // 设置监听事件
    mediaPlayer.start();
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch blockj
    e.printStackTrace();
    }
    mediaPlayer.setOnBufferingUpdateListener(this);
    mediaPlayer.setOnPreparedListener(this);
    mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    next();
    }
    });
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    } @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
    event.startTracking();
    finish();
    System.exit(0);
    return true;
    } return super.onKeyDown(keyCode, event);
    } public class MyWebViewClient extends WebViewClient {
    public boolean shouldOverviewUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
    }
    } private void next(){
    if (++index >= list.size()) {
    index = 0;
    } else {
    play(list.get(index));
    System.out.println("111111111111111");
    }
    }


    public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    // mp.seekTo(0); mp.start();
    } public void onPrepared(MediaPlayer mp) {
    // TODO Auto-generated method stub
    videoWhith = mediaPlayer.getVideoWidth();
    videoHeight = mediaPlayer.getVideoHeight(); if (videoWhith != 0 && videoHeight != 0) {
    // 设置视频的宽度和高度
    hodler.setFixedSize(videoWhith, videoHeight);
    // 开始播放 }
    } public void onBufferingUpdate(MediaPlayer mp, int percent) {
    // TODO Auto-generated method stub } // 更改时触发事件
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
    // TODO Auto-generated method stub } // 当SurfaceHolder创建时触发
    public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    play(list.get(index)); }
    public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub } // 销毁
    @Override
    protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if (mediaPlayer != null) {
    mediaPlayer.release();
    mediaPlayer = null;
    }
    } private void getFiles(String url) {
    try {
    File file = new File(url);
    File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) {
    if (files[i].isDirectory()) {
    getFiles(files[i].getAbsolutePath());
    } else {
    if (files[i].getAbsolutePath().endsWi(".3gp")
    || files[i].getAbsolutePath().endsWith(".mp4")) {
    list.add(files[i].toString());
    System.out.println(files[i].toString());
    }
    }
    }
    } catch (Exception e) {
    Log.d("getfile", "查找成功!");
    } }
    }
      

  2.   

    播放下一个之前,把mediaplayer的对象stop()&&release(),这样再试试呢?
    貌似播完一个,直接setDataSource()是不行的。
      

  3.   

    我今天才实现了这个功能。不过我是用VideoView控件做的。。
    你已经继承了 OnCompletionListener,为什么添加监听器的时候,还要自己new一个呢。
      

  4.   

    你这样的话,这个方法是不会执行的,只会执行你添加的那个监听器的onCompletion方法。
    public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    // mp.seekTo(0);mp.start();
    }
      

  5.   

    求分享源代码,谢谢,我得邮箱是   [email protected]   致敬!!!