停止播放是否出现什么提示?如果有错误提示,将Logcat中的出错信息发上来。

解决方案 »

  1.   


                           package com.zhu.view;import java.io.File;import android.app.Activity;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnPreparedListener;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.Toast;import com.zhu.R;public class VideoPlay extends Activity implements Callback {
    private String path;
    private MediaPlayer mediaPlayer;
    String pathload;
    private SurfaceView surfaceView;
    private boolean pause;
    private String filenames; @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /* 隐藏状态栏 */
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    /* 隐藏标题栏 */
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.video);
    mediaPlayer = new MediaPlayer();
    Bundle bundle = this.getIntent().getExtras();
    filenames = bundle.getString("filenames");
    pathload = bundle.getString("pathload");
    surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
    surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    surfaceView.getHolder().setFixedSize(320, 180);
    surfaceView.getHolder().setKeepScreenOn(true);
    surfaceView.getHolder().addCallback(this);
    playOn();
    }

    public void mediaplay(View v) {
    switch (v.getId()) {
    case R.id.playbutton:
    if (pause && mediaPlayer!=null)
    {
    mediaPlayer.start();
    pause = false;
    }
    else{
    String filename = filenames.toString();
    File file = new File(Environment.getExternalStorageDirectory(),
    filename);
    if (file.exists()) {
    path = file.getAbsolutePath();
    play(0);
    } else {
    path = null;
    Toast.makeText(this, R.string.filenoexsit, Toast.LENGTH_LONG).show();
    }
    }
    break; case R.id.pausebutton:
    if (mediaPlayer.isPlaying()) {
    mediaPlayer.pause();
    pause = true;
    } else {
    if (pause) {
    mediaPlayer.start();
    pause = false;
    }
    }
    break; case R.id.resetbutton:
    if (mediaPlayer.isPlaying()) {
    mediaPlayer.seekTo(0);
    } else {
    if (path != null) {
    play(0);
    }
    }
    break;
    case R.id.stopbutton:
    if (mediaPlayer.isPlaying()) {
    mediaPlayer.stop();
    }
    break;
    }
    }

    private void play(int position) {
    try {
    mediaPlayer.reset();
    mediaPlayer.setDataSource(path);
    mediaPlayer.setDisplay(surfaceView.getHolder());
    mediaPlayer.prepare();// 缓冲
    mediaPlayer.setOnPreparedListener(new PrepareListener(position));
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    private void playOn() {
    try {
    mediaPlayer.reset();
    mediaPlayer.setDataSource(pathload);
    mediaPlayer.setDisplay(surfaceView.getHolder());
    mediaPlayer.prepare();// 缓冲
    mediaPlayer.start();
    } catch (Exception e) {
    e.printStackTrace();
    }
    } private final class PrepareListener implements OnPreparedListener {
    private int position; public PrepareListener(int position) {
    this.position = position;
    } public void onPrepared(MediaPlayer mp) {
    mediaPlayer.start();
    if (position > 0)
    mediaPlayer.seekTo(position);
    }
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub

    } @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
    // TODO Auto-generated method stub

    } @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub

    }
    }
      

  2.   

    package com.android.loop;import java.io.IOException;import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnPreparedListener;
    import android.os.Bundle;
    import android.os.PowerManager;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;public class PreviewActivityLoop extends Activity {
    public static final String VIDEO_FOLDER_PATH =  PropagandaVedioSettings.path;
    private PowerManager.WakeLock localWakeLock = null;
    private SurfaceView surfaceView = null;
    private SurfaceHolder holder  = null;
    private MediaPlayer mPlayer  = null;
    private String[] sourceList;
    private int sourceIndex = -1;
    FileList filelist = new FileList(); public void onCreate(Bundle paramBundle) {
    super.onCreate(paramBundle);
    requestWindowFeature(Window.FEATURE_NO_TITLE); //hide title
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    , WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setRequestedOrientation(0);// change display orientation
    localWakeLock = ((PowerManager) getSystemService(Context.POWER_SERVICE))
    .newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen");
    localWakeLock.acquire();//do not auto lock 

    View view = getLayoutInflater().inflate(R.layout.surfaceview, null);
    setContentView(view);

    Bundle bundle = getIntent().getExtras();
    sourceIndex = bundle.getInt("sourceIndex");
    sourceList = bundle.getStringArray("sourceList");

    mPlayer = new MediaPlayer();
    surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
    surfaceView.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    finish();
    return false;
    }
    });
    holder = surfaceView.getHolder();
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holder.setKeepScreenOn(true);
    holder.addCallback(new SurfaceListener());

    mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    Intent intent = new Intent();
    Bundle bundleloop = new Bundle();
    bundleloop.putInt("sourceIndexloop", sourceIndex);
    bundleloop.putStringArray("sourceListloop", sourceList);

    intent.putExtras(bundleloop);
    ComponentName cn = new ComponentName("com.android.loop","com.android.loop.PreviewActivity");
    intent.setComponent(cn);
    startActivity(intent);
    finish();
    }
    });
    }

    @Override
    protected void onDestroy() {
    if(mPlayer.isPlaying()){
    mPlayer.stop();
    }
    mPlayer.release();//release mPlayer

    localWakeLock.release();//release localWakeLock
    super.onDestroy();
    }

    @Override
    protected void onPause() {
    finish();
    super.onPause();

    }

    private void play(String dataSource){
    try{
    mPlayer.reset();
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mPlayer.setDataSource(dataSource);
    mPlayer.setDisplay(holder);
    mPlayer.prepare();
    mPlayer.start();
    }catch(IOException e){
    Log.e("Exception", e.toString());
    }

    // mPlayer.setOnPreparedListener(new OnPreparedListener() {
    //
    // @Override
    // public void onPrepared(MediaPlayer mp) {
    // mPlayer.start();
    // }
    // });
    }

    private class SurfaceListener implements SurfaceHolder.Callback{ @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
    // TODO Auto-generated method stub
    } @Override
    public void surfaceCreated(SurfaceHolder holder) {
    //play(filelist.getVideo(sourceIndex));
    play(sourceList[sourceIndex]);
    sourceIndex++;
    sourceIndex = sourceIndex%sourceList.length;
    } @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }

    }}
      

  3.   

    恩,谢谢各位,播放的问题算是解决了。但又遇到了两个新的问题:一,视频播放过程中一卡一顿的,搜了一下,说是模拟器的原因,真机上没这个问题,因为没用真机测试过,所以不知道;二,视频格式支持的问题,看了网上所说,Android默认支持的视频格式只有3gp、mp4(貌似mp4也不是全部支持的),如果我现在要播放avi的视频,是否有什么插件可以使用,还是要自己写解码实现?