-2
當我調用Mediaplayer時,在某些較新的Android模型上發生IllegalStateException。它主要是Android 6.和7手機。我似乎無法弄清楚如何解決這個問題,而這裏的其他「問題」似乎並不適用於我的問題。致命異常:android.media.MediaPlayer上的java.lang.IllegalStateException
正在此堆棧跟蹤:
Fatal Exception: java.lang.IllegalStateException
at android.media.MediaPlayer._prepare(MediaPlayer.java)
at android.media.MediaPlayer.prepare(MediaPlayer.java:1369)
at org.my.app.IntroVideoSurfaceView.surfaceCreated(IntroVideoSurfaceView.java:51)
at android.view.SurfaceView.updateWindow(SurfaceView.java:712)
at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:316)
at android.view.View.dispatchWindowVisibilityChanged(View.java:10434)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1330)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1330)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1330)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1330)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1751)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1438)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7398)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
at android.view.Choreographer.doCallbacks(Choreographer.java:695)
at android.view.Choreographer.doFrame(Choreographer.java:631)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
這是我的課:
public class IntroVideoSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private MediaPlayer mp;
private boolean has_started = false;
@TargetApi(Build.VERSION_CODES.LOLLIPOP) public IntroVideoSurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
public IntroVideoSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public IntroVideoSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public IntroVideoSurfaceView(Context context) {
super(context);
init();
}
private void init() {
mp = new MediaPlayer();
getHolder().addCallback(this);
}
@Override public void surfaceCreated(SurfaceHolder holder) {
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.onboarding);
try {
if (!has_started) {
has_started = true;
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
}
mp.prepare();
android.view.ViewGroup.LayoutParams lp = getLayoutParams();
lp.height = getHeight();
lp.width = getWidth();
setLayoutParams(lp);
mp.setDisplay(getHolder());
mp.setLooping(true);
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override public void surfaceDestroyed(SurfaceHolder holder) {
mp.stop();
}
}
這是我的xml文件我在活動中呼籲,以顯示視頻:
<org.my.app.IntroVideoSurfaceView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="match_parent" />
哪一行是51號? – Sanoop
Line numer 51是:mp.prepare(); – datasmurfen
你確定當你到達mp.prepare()mp狀態「初始化」 – Alex