1

我的应用程序使用YouTube数据API v3播放YouTube视频。我有一个活动VideoPlayerActivity,使用YouTubeSupportFragment播放Youtube视频。在播放第一个视频时,我还允许用户选择另一个视频进行播放,它将自行启动VideoPlayerActivity播放第二个视频。一切顺利。但是当我按回来再次观看第一个视频,并按YoutubePlayer controll中的播放按钮时,它会崩溃。
为了简单起见,我使用样本中的FragmentDemoActivity。在这个活动中,我有一个按钮,当用户点击它时,这将开始FragmentDemoActivity本身播放第二个视频。一切正常。但是当按Back并点击YoutubePlayer controll上的播放按钮时。它崩溃。 这是代码。使用YouTube数据API时发生崩溃

public class FragmentDemoActivity extends YouTubeFailureRecoveryActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e("FragmentDemoActivity", "onCreate"); 
     setContentView(R.layout.fragments_demo); 

     YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager() 
       .findFragmentById(R.id.youtube_fragment); 
     youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY, this); 

     (findViewById(R.id.btn_click)) 
       .setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         Intent intent = new Intent(FragmentDemoActivity.this, 
           FragmentDemoActivity.class); 
         startActivity(intent); 
        } 
       }); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, 
      YouTubePlayer player, boolean wasRestored) { 
     Log.e("FragmentDemoActivity", "onInitializationSuccess " + wasRestored); 
     if (!wasRestored) { 
      player.cueVideo("VvseoF9eASw"); 
     } 
    } 

    @Override 
    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
     return (YouTubePlayerFragment) getFragmentManager().findFragmentById(
       R.id.youtube_fragment); 
    } 

} 

这里是logcat的

09-29 22:18:31.181: E/AndroidRuntime(26398): FATAL EXCEPTION: main 
09-29 22:18:31.181: E/AndroidRuntime(26398): java.lang.RuntimeException: PlaybackMonitor queried outside playback sequence 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckj.j(PG:114) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckj.i(PG:101) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at cjt.N(PG:746) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at cjt.e(PG:673) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckl.i(PG:252) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at cps.a(PG:295) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at abq.run(PG:356) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at android.os.Handler.handleCallback(Handler.java:730) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at android.os.Looper.loop(Looper.java:150) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at android.app.ActivityThread.main(ActivityThread.java:5390) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at java.lang.reflect.Method.invoke(Method.java:525) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at dalvik.system.NativeStart.main(Native Method) 
09-29 22:18:31.181: E/AndroidRuntime(26398): Caused by: java.lang.Throwable: currentPlaybackSequenceMonitor became null here 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckj.b(PG:61) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at cvc.j(PG:171) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckl.x(PG:178) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckl.a(PG:191) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at ckl.b(PG:733) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at pq.d(PG:510) 
09-29 22:18:31.181: E/AndroidRuntime(26398): at zj.run(PG:408) 
09-29 22:18:31.181: E/AndroidRuntime(26398): ... 9 more 
09-29 22:18:31.251: E/IMGSRV(167): :0: PVRDRMOpen: TP3, ret = 42 
09-29 22:18:31.311: E/IMGSRV(167): :0: PVRDRMOpen: TP3, ret = 43 
09-29 22:18:32.221: E/IMGSRV(167): :0: PVRDRMOpen: TP3, ret = 34 
09-29 22:18:32.441: E/IMGSRV(167): :0: PVRDRMOpen: TP3, ret = 43 
09-29 22:18:33.141: E/IMGSRV(167): :0: PVRDRMOpen: TP3, ret = 76 
09-29 22:18:33.211: E/AndroidRuntime(26229): FATAL EXCEPTION: main 
09-29 22:18:33.211: E/AndroidRuntime(26229): java.lang.RuntimeException: Unable to pause activity {com.examples.youtubeapidemo/com.examples.youtubeapidemo.FragmentDemoActivity}: java.lang.IllegalStateException: android.os.DeadObjectException 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3220) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3175) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3153) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread.access$800(ActivityThread.java:148) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1366) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.os.Looper.loop(Looper.java:150) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread.main(ActivityThread.java:5390) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at java.lang.reflect.Method.invoke(Method.java:525) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at dalvik.system.NativeStart.main(Native Method) 
09-29 22:18:33.211: E/AndroidRuntime(26229): Caused by: java.lang.IllegalStateException: android.os.DeadObjectException 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.i(PG:522) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at sc.g(PG:174) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at fkz.onTransact(PG:360) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.os.Binder.transact(Binder.java:347) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.google.android.youtube.player.internal.d$a$a.o(Unknown Source) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.google.android.youtube.player.internal.s.d(Unknown Source) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.google.android.youtube.player.YouTubePlayerView.c(Unknown Source) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.google.android.youtube.player.YouTubePlayerFragment.onPause(Unknown Source) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.Fragment.performPause(Fragment.java:1854) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:930) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1039) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.FragmentManagerImpl.dispatchPause(FragmentManager.java:1861) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.Activity.performPause(Activity.java:5403) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1233) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3206) 
09-29 22:18:33.211: E/AndroidRuntime(26229): ... 12 more 
09-29 22:18:33.211: E/AndroidRuntime(26229): Caused by: android.os.DeadObjectException 
09-29 22:18:33.211: E/AndroidRuntime(26229): at android.os.BinderProxy.transact(Native Method) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at aai.e(PG:629) 
09-29 22:18:33.211: E/AndroidRuntime(26229): at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.i(PG:519) 

09-29 22:21:02.441: E/ActivityThread(26565): Activity com.examples.youtubeapidemo.FragmentDemoActivity has leaked ServiceConnection [email protected] that was originally bound here 
09-29 22:21:02.441: E/ActivityThread(26565): android.app.ServiceConnectionLeaked: Activity com.examples.youtubeapidemo.FragmentDemoActivity has leaked ServiceConnection [email protected] that was originally bound here 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:974) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:868) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ContextImpl.bindServiceAsUser(ContextImpl.java:1525) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ContextImpl.bindService(ContextImpl.java:1513) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.content.ContextWrapper.bindService(ContextWrapper.java:497) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.google.android.youtube.player.internal.r.e(Unknown Source) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.google.android.youtube.player.YouTubePlayerView.a(Unknown Source) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.google.android.youtube.player.YouTubePlayerFragment.a(Unknown Source) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.google.android.youtube.player.YouTubePlayerFragment.initialize(Unknown Source) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.examples.youtubeapidemo.FragmentDemoActivity.onCreate(FragmentDemoActivity.java:49) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.Activity.performCreate(Activity.java:5303) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ActivityThread.access$600(ActivityThread.java:148) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.os.Looper.loop(Looper.java:150) 
09-29 22:21:02.441: E/ActivityThread(26565): at android.app.ActivityThread.main(ActivityThread.java:5390) 
09-29 22:21:02.441: E/ActivityThread(26565): at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 22:21:02.441: E/ActivityThread(26565): at java.lang.reflect.Method.invoke(Method.java:525) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-29 22:21:02.441: E/ActivityThread(26565): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-29 22:21:02.441: E/ActivityThread(26565): at dalvik.system.NativeStart.main(Native Method) 
09-29 22:21:04.541: E/FragmentDemoActivity(26565): onCreate 
09-29 22:21:04.821: E/FragmentDemoActivity(26565): onInitializationSuccess false 

任何帮助,将不胜感激。提前致谢。

+0

,我发现了同样的问题。我希望有人能指出正确的方向。 – bianca 2014-10-05 05:30:05

+1

我一个星期前在谷歌代码YouTube API上发布了这个问题,但他们还没有回复。 :( – 2014-10-08 02:44:16

回答

1

只是做

创建

private YouTubePlayer youTubePlayer; 

然后初始化youTubePlayer = player;

@Override 
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 
    Log.e("FragmentDemoActivity", "onInitializationSuccess " + wasRestored); 
    if (!wasRestored) { 
     player.cueVideo("VvseoF9eASw"); 
    } 
    youTubePlayer = player; 
} 

,并覆盖onResume()

@Override 
protected void onResume() { 
    super.onResume(); 
    if (youTubePlayer !=null) { 
     youTubePlayer.cueVideo("VvseoF9eASw"); 
} 

附:

如果你想从最后时刻(暂停)开始播放视频,然后拿到VideoPlayerActivitymPlayer.getCurrentTimeMillis()暂停时间,发送到FragmentDemoActivity

FragmentDemoActivity这种变化onResume()

@Override 
protected void onResume() { 
    super.onResume(); 
    if (youTubePlayer !=null) { 
     youTubePlayer.cueVideo("VvseoF9eASw", time_from_video_player_activity); 
}