Android:YouTube播放器已发布



我正在遇到此错误 Fatal Exception: java.lang.IllegalStateException This YouTubePlayer has been released,但是release()未明确称为。

if(youtubePlayer != null){
 time = youtubePlayer.getCurrentTimeMillis();//exception may occur
}

是否可以检查youtubePlayer是否是released?有回调吗?谢谢。

YouTube SDK中的大多数代码被混淆,这确实很难调试。没有任何直接方法可以检查YouTubePlayer是否已发布也无济于事。

说,我认为使youtubeplayer null(在onstop(instop()中)似乎更像是 hack 对我而言。您应该在OnDestroy()中释放YouTubePlayer,并且不要在任何地方手动分配为null。一种简单的方法来检查YouTubePlayer是否已发布是打电话(例如youtubeplayer.loadvideo(),cuevideo(),cuevideo(),getCurrentTimeMillis()等),将其放入尝试catch块中,并捕获IllegalStateException。/strong>

根据错误:

的YouTube SDK文档

公共静态最终YouTubePlayer.Errorrason Intirut_service_disconnection

播放已被取消,并且由于 与YouTube API服务的意外断开连接。进一步 呼叫此播放器实例将导致错误,一个新播放器 必须创建实例以重新启用播放。

因此,要创建YouTubePlayer的新实例,只需调用catch块中的initialize()方法。

示例:

public void setVideoId(final String videoId) {
    if (videoId != null && !videoId.equals(this.videoId)) {
        this.videoId = videoId;
        if (youtubePlayer != null) {
            try {
                youtubePlayer.loadVideo(videoId);
            } catch (IllegalStateException e) {
                initialize(API_KEY, this);
            }
        }
    }
}
@Override
public void onDestroy() {   
    if (youtubePlayer != null) {
        youtubePlayer.release();
    }
    super.onDestroy();
}

我通过在活动的onDestroy中进行录像机null解决了此问题。

编辑:

onStop中尝试的,它可以正常工作。
@mickeytin,谢谢..

youtubePlayer.getCurrentTimeMillis();返回的变量类型是int
这应该有效:

if(youtubePlayer != null){
 int millis = youtubePlayer.getCurrentTimeMillis();//exception may occur
}

这就是我设法摆脱此例外的方式。就我而言,它被扔在onsaveinstancestate上,我尝试使用相同的代码来保存当前的播放器位置:

if(youtubePlayer != null){ time = youtubePlayer.getCurrentTimeMillis(); }

和成功的播放器初始化在onitializationsuctescess中,我继续使用 time 从bundle中分配的值 time

但事实证明,这种方法是不必要的。为了避免例外投掷,我刚刚添加了android:configChanges="orientation|screenSize"属性在我的播放器活动中。这使系统处理方向自身发生变化,并添加 time 参数来提示视频变得多余。这就是检查 wasrestored flag的方法

这是更改摘要:

androidmanifest.xml:

<activity android:name=".VideoPlayerActivity"
android:configChanges="orientation|screenSize"/>

videoplayeractivity.java:

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
        this.mPlayer = player;
        if (!wasRestored) {
            mPlayer.loadVideo(mVideoId);
        }
    }

相关内容

  • 没有找到相关文章

最新更新