java.lang.ClassCastException с YouTube API для Android
При попытке воспроизвести видео с помощью API YouTube появляется следующая ошибка. Видео будет инициализировано и покажет миниатюру, но когда вы нажмете кнопку воспроизведения, приложение вылетает.
Это происходит только на устройстве Android LG P925. Видео на самом деле будет воспроизводиться на других устройствах.
Вот ошибка:
03-04 20:20:49.140 10473-10496/? E/AndroidRuntime﹕ FATAL EXCEPTION: YouTubePlayer.MediaPlayerThread
java.lang.ClassCastException: com.google.android.apps.youtube.api.b.a.cx cannot be cast to android.view.S3DSurfaceHolder
at android.media.MediaPlayer.notifyS3DChanged(MediaPlayer.java:2102)
at android.media.MediaPlayer.start(MediaPlayer.java:938)
at com.google.android.apps.youtube.core.player.as.e(SourceFile:163)
at com.google.android.apps.youtube.core.player.ax.b(SourceFile:38)
at com.google.android.apps.youtube.core.player.bd.handleMessage(SourceFile:689)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)
03-04 20:20:51.164 232-286/? E/WifiStateMachine﹕ newRssi value = -55
03-04 20:20:52.890 139-231/? E/CrayonGraph-Base﹕ [setState] OMX.VisualOn.FileSource, state=0x1, error=0x80001012
03-04 20:20:52.890 139-231/? E/CrayonGraph-Base﹕ [setState] OMX.VisualOn.FileSource, state=0x1, error=0x80001012
03-04 20:20:52.898 139-10509/? E/CrayonGraph-Base﹕ [setState] OMX.VisualOn.FileSource, state=0x1, error=0x80001012
03-04 20:20:52.992 10293-10293/com.nickprofitt.YoutubeListing E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: android.os.DeadObjectException
at com.google.android.apps.youtube.api.jar.a.eo.surfaceDestroyed(SourceFile:236)
at android.view.SurfaceView.updateWindow(SurfaceView.java:581)
at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:245)
at android.view.View.dispatchDetachedFromWindow(View.java:9905)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3581)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3561)
at android.view.ViewGroup.removeView(ViewGroup.java:3509)
at com.google.android.youtube.player.YouTubePlayerView$1.b(Unknown Source)
at com.google.android.youtube.player.internal.r.h(Unknown Source)
at com.google.android.youtube.player.internal.r$e.onServiceDisconnected(Unknown Source)
at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1076)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1090)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4516)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.DeadObjectException
at android.os.BinderProxy.transact(Native Method)
at com.google.android.apps.youtube.api.b.a.be.a(SourceFile:221)
at com.google.android.apps.youtube.api.jar.a.eo.surfaceDestroyed(SourceFile:233)
at android.view.SurfaceView.updateWindow(SurfaceView.java:581)
at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:245)
at android.view.View.dispatchDetachedFromWindow(View.java:9905)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3581)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3561)
at android.view.ViewGroup.removeView(ViewGroup.java:3509)
at com.google.android.youtube.player.YouTubePlayerView$1.b(Unknown Source)
at com.google.android.youtube.player.internal.r.h(Unknown Source)
at com.google.android.youtube.player.internal.r$e.onServiceDisconnected(Unknown Source)
at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1076)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1090)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4516)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
Вот код:
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored)
{
ytPlayer = player;
player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION
| YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI
| YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);
if(!wasRestored)
{
player.cueVideo(FeedAccount.getInstance().getVideoIDArray()[FeedAccount.getInstance().getSelectionIndex()]);
final YouTubePlayer mPlayer = player;
ytPlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
@Override
public void onFullscreen(boolean fullsize) {
if (fullsize) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
});
player.setPlaybackEventListener(new YouTubePlayer.PlaybackEventListener() {
@Override
public void onPlaying() {
if(!wasPlaying)
{
wasPlaying = true;
mPlayer.setFullscreen(true);
}
}
@Override
public void onPaused() {
}
@Override
public void onStopped() {
}
@Override
public void onBuffering(boolean b) {
}
@Override
public void onSeekTo(int i) {
}
});
}
}
1 ответ
Использовать loadVideo(video_id) вместо cueVideo(video_id), это мне помогает