:表面已被釋放,當我嘗試我的XML文件setDisplay到MediaPlayer的
<SurfaceView
android:id="@+id/surfaceView"
android:layout_marginTop="50dp"
android:layout_width="fill_parent"
android:layout_height="300dp" />
我的功能setDisplay:
public void playVideo() {
MediaPlayer mp = new MediaPlayer();
SurfaceView sv = (SurfaceView) this.findViewById(R.id.surfaceView);
try {
mp.setDataSource("sdcard/test/a.3gp");
SurfaceHolder sh = sv.getHolder();
mp.setDisplay(sh);***----the exception occured here***
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
日誌如下:
04-24 22:19:33.645: W/System.err(16106): java.lang.IllegalArgumentException: The surface has been released
04-24 22:19:33.645: W/System.err(16106): at android.media.MediaPlayer._setVideoSurface(Native Method)
04-24 22:19:33.645: W/System.err(16106): at android.media.MediaPlayer.setDisplay(MediaPlayer.java:698)
我在這裏發現了一些類似的問題,但所有這些都不適合我。等待你的答案。非常感謝。
我試過了你說的,但它不起作用,屏幕變成黑色。等待你的更多信息。非常感謝您的回答。 – Cooosuper 2013-04-25 01:50:39
我只注意到在surfaceDestroyed中,我在同一個對象的同步塊中放置了同步。刪除第二個。看起來你似乎在等待。我建議如果這不起作用,你附加一個調試器,並暫停你看到的所有線程,以便找到哪個線程正在等待() – EyalBellisha 2013-04-25 15:05:53
我已經嘗試了另一種方法來解決它。我將'setDisplay'移動到回調時表面被創建('surfaceCreated')。它完成了。非常感謝您的回答! – Cooosuper 2013-04-26 01:50:01