Mỗi lần định hướng thay đổi hoạt động sẽ được tạo lại miễn là với tất cả các thành phần con. Bây giờ phần quan trọng là, YouTubePlayer.Provider sẽ giữ các giai đoạn của nó (chẳng hạn như: video đã tải, vị trí phát lại hiện tại và cấu hình trình phát). Hãy nhìn vào những điều sau đây:
YouTubePlayer Overview
Trong trường hợp của bạn, sau khi thay đổi định hướng, hoạt động này được tái tạo càng lâu càng đoạn con của nó (youTubePlayerFragment). Vì vậy, bạn đã mất tham chiếu về ngay lập tức của YouTubePlayer và dữ liệu (chẳng hạn như videoID hoặc url video) cần thiết để tải video, nhưng nhà cung cấp YouTubePlayer vẫn đang giữ trạng thái trước đó, trở thành vô hiệu sau khi xoay vòng.
Giải pháp: bạn thực sự cần quản lý cách lưu dữ liệu cần thiết để phát video trên YouTubePlayer trước khi thiết bị thay đổi hướng và để lấy lại dữ liệu khi hoạt động được tạo lại. Hãy nhìn vào những điều sau đây:
YouTubePlayerFragment Overview
Không chắc về cấu trúc mã của bạn, nhưng hy vọng các mã sau đây sẽ cung cấp cho bạn một số ý tưởng:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("currentVideoID",videoID);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
videoID = savedInstanceState.getString("currentVideoID");
}
Một mẫu để có được những video chơi trên YouTubePlayer
private void loadYouTubePlayer(){
//load your youTubePlayerFragment here, i used YouTubePlayerSupportFragment(),may change in your case
//also you may not need to call getActivity(). Change the code as require
youTubePlayerFragment = (YouTubePlayerSupportFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.youtube_fragment);
youTubePlayerFragment.initialize(developerKey,new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
myYouTubePlayer = youTubePlayer;
myYouTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);
myYouTubePlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
@Override
public void onFullscreen(boolean b) {
isFullScreenPlaying = b;
Log.d(null,"Now fullScreen");
}
});
if (!b) {
myYouTubePlayer.loadVideo(videoID);
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Log.e(null,"Initialization Failed !!!");
}
});
}