媒体播放器有时不起作用

时间:2013-06-26 13:57:58

标签: android video media-player android-mediaplayer surfaceview

当我使用mediaplayer使用我的应用播放视频时,我遇到了问题。有时视频会很好,但有时会出现黑屏。它不是我正在调用视频的文件,因为我已经在同一个文件上进行了测试,它有时会工作,有时却不会。我觉得这个问题最常出现在我播放了几个视频之后。在问题开始之前我通常会打3-4。我想知道是什么造成了这个以及如何解决它。我的代码发布在下面。

public class FullImageActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener, OnErrorListener{

private static final String TAG = null;
MediaPlayer player;
SurfaceView surfaceview;
SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.full_image);

    Intent i = getIntent();

    long id = i.getExtras().getLong("id");
    String path = i.getExtras().getString("videopath");

    surfaceview = (SurfaceView)findViewById(R.id.surfaceview);
    surfaceHolder = surfaceview.getHolder();
    surfaceHolder.addCallback(this);

    player = new MediaPlayer();

    try {
        player.reset();


        player.setOnErrorListener(this);
        player.setDataSource(path);
        player.setOnPreparedListener(this);

        player.prepare();
        player.start();


    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}
@Override
public void surfaceCreated(SurfaceHolder holder) {
    player.setDisplay(holder);
}

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

}
@Override
public void onPrepared(MediaPlayer p) {

}

@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
    Log.i(TAG, "THERE WAS AN ERROR");
    return false;
}

感谢。

2 个答案:

答案 0 :(得分:1)

很难确切地知道问题所在。

要尝试的几件事情:

答案 1 :(得分:1)

问题是,你的实现依赖于媒体播放器完成时活动被破坏的假设。

然而,当您的意图被激发时,您的活动已经存在。在这种情况下,您的应用程序会跳过onCreate(),因此无法初始化媒体播放器。

您应该覆盖onStart()方法以启动媒体播放器。