2013-06-26 42 views
2

我遇到了问题,当我使用mediaplayer与我的应用程序一起播放视频时。有时候视频播放会很好,但有些时候会出现黑屏。它不是我打电话给视频的文件,因为我已经在同一个文件上进行了测试,它有时可用,有时不起作用。我觉得这个问题最常发生在我玩过几部影片后。在问题开始之前,我通常会玩3-4。我想知道是什么导致了这种情况,以及我如何解决这个问题。我的代码发布在下面。Mediaplayer有时不起作用

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

谢谢。

回答

1

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

几件事情尝试:

1

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

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

您应该重写onStart()方法来启动媒体播放器。