2013-06-26 120 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()方法來啓動媒體播放器。