首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OnResume中恢复安卓youtubePlayer

在OnResume中恢复安卓youtubePlayer
EN

Stack Overflow用户
提问于 2015-09-30 17:05:29
回答 3查看 2.5K关注 0票数 0

我有一个YouTubeBaseActivity,它工作得很好,但当我单击转到另一个活动,然后返回到那个活动,它不会自动播放。

我希望它能继续播放,并重新开始播放列表。

下面是一个类:

代码语言:javascript
复制
    public class VideoPlayer extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener,View.OnClickListener{

private YouTubePlayerView ytp_mainvideo;
private YouTubePlayer vyouTubePlayer;
private YouTubePlayer.PlayerStateChangeListener mPlayerStateChangeListener;
boolean fullScreen =false;
TextView txtMainVideo;
List<String> videoList;
static String currentKey="";
Utilities utilities = new Utilities(this);
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save state

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onResume() {
    super.onResume();

            if (vyouTubePlayer == null) {
               ytp_mainvideo.initialize(Config.DEVELOPER_KEY, this);

            }

}
@Override
protected void onStop() {
    super.onStop();
   if(vyouTubePlayer!=null)
       vyouTubePlayer.cueVideos(videoList);

}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.vidsplash);
    currentKey = utilities.getLicenseKey();
    // Initialize the Main Video Player.

    ytp_mainvideo =(YouTubePlayerView)findViewById(R.id.youtubPlayerView);
    ytp_mainvideo.initialize(Config.DEVELOPER_KEY, this);
    txtMainVideo =(TextView)findViewById(R.id.text_mainvideo);
    txtMainVideo.setOnClickListener(this);
    Resources res = getResources();
    String[] varray = res.getStringArray(R.array.videolist);
    videoList = Arrays.asList(varray);
    mPlayerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {
        @Override
        public void onLoading() {

        }

        @Override
        public void onLoaded(String s) {

        }

        @Override
        public void onAdStarted() {

        }

        @Override
        public void onVideoStarted() {

        }

        @Override
        public void onVideoEnded() {
            Log.d("ShowCase", "Video Ended");
            if(vyouTubePlayer != null)
                vyouTubePlayer.loadVideos(videoList);
        }

        @Override
        public void onError(YouTubePlayer.ErrorReason errorReason) {

        }
    };
    if(currentKey.compareTo("")==0) {
        Intent i = new Intent(getApplicationContext(), NewStartActivity.class);
        startActivity(i);
    }
}

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.text_mainvideo:
            Intent intentsub=new Intent(getApplicationContext(),CateMainActivity.class);
            startActivity(intentsub);
            break;

    }
}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
    vyouTubePlayer =youTubePlayer;
    youTubePlayer.setPlayerStateChangeListener(mPlayerStateChangeListener);
    if (!wasRestored) {
        // loadVideo() will auto play video
        // Use cueVideo() method, if you don't want to play it automatically
        youTubePlayer.loadVideos(videoList);
        // Hiding player controls
        youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS);
        youTubePlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {

            @Override
            public void onFullscreen(boolean _isFullScreen) {
                fullScreen = _isFullScreen;
            }
        });


    }
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Toast.makeText(appContext, "BAck", Toast.LENGTH_LONG).show();
        AlertDialog.Builder alert = new AlertDialog.Builder(
                VideoPlayer.this);
        alert.setTitle(getString(R.string.app_name));
        alert.setIcon(R.drawable.app_icon);
        alert.setMessage("Are You Sure You Want To Quit?");

        alert.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int whichButton) {

                        //you may open Interstitial Ads here
                        finish();
                    }

                });

        alert.setNegativeButton("NO",
                new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                });
        alert.show();
        return true;
    }

    return super.onKeyDown(keyCode, event);

}

}

EN

回答 3

Stack Overflow用户

发布于 2016-12-09 22:35:17

首先声明YoutubePlayer & seekTime变量

代码语言:javascript
复制
private YouTubePlayer youTubePlayer;
private int seekTime = 0;

然后在OnInitializationSuccess方法中将其设置为youtubePlayer

代码语言:javascript
复制
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {

    this.youTubePlayer = youTubePlayer;

    if (!wasRestored) {
        youTubePlayer.loadVideo(videoId);
    }

}

之后,您可以将视频当前时间存储在onPause中,并可以使用下面的技巧在onResume方法中恢复视频

代码语言:javascript
复制
@Override
protected void onResume() {
    super.onResume();

    if (youTubePlayer == null) {
        getYouTubePlayerProvider();
    } else {
        youTubePlayer.loadVideo(videoId, seekTime);
    }
}

@Override
protected void onPause() {
    super.onPause();
    seekTime = youTubePlayer.getCurrentTimeMillis();
}

它对我来说很好,对你也一样。继续编码:)

票数 4
EN

Stack Overflow用户

发布于 2015-09-30 17:28:45

尝尝这个

代码语言:javascript
复制
protected void onResume() {
    super.onResume();

    if (vyouTubePlayer == null) {
        ytp_mainvideo.initialize(Config.DEVELOPER_KEY, this);
    }
    else {
        vyouTubePlayer.Play();
    }
}

我认为它在OnPause被暂停了,所以你需要调用Play()

票数 2
EN

Stack Overflow用户

发布于 2015-09-30 19:32:18

我的解决方案是创建第二个API密钥。这是一个非常罕见的问题,我很感谢Faceles的回答,他的回答引导我解决了这个问题。在这个项目中,我使用了两个Youtube播放器,所以当我使用第二个播放器移动到另一个活动并返回到第一个时,它从未加载过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32862097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档