画面回転後にYouTubePlayerのインスタンスがnullになってしまいます。
現在YouTube Player API
を使ったadnroidアプリを作っているのですが、以下のようなコードでインスタンスを管理しているのですが、画面回転後に参照するとnullになっています。画面回転後も同じインスタンスを参照することはできますか?
コード:
@Override
public void onStart(){
super.onStart();
Log.d("onstart", "onstart");
if(playerInstance==null||player==null){
//YouTube player apiを初期化
initYouTube();
}
}
//Initialize YouTube player
private void initYouTube(){
//プレイヤを読み込む
player = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);
//プレイヤーを初期化
player.initialize(apiKey, this);
}
初期化完了時に呼び出されるコールバックメソッド:
//Player関連メソッド
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean b) {
if(!b){
//ここでインスタンスを保持している。
this.playerInstance = youTubePlayer;
youTubePlayer.loadVideo(videoId);
prevVideoIdList.add(videoId);
//If it is smart phone and orientation is land, use full screen
Context context = getApplicationContext();
Resources r = context.getResources();
Configuration configuration = r.getConfiguration();
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB_MR2){
if((configuration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
<Configuration.SCREENLAYOUT_SIZE_LARGE){
youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
| YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
}else{
youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
}
}else{
if(configuration.smallestScreenWidthDp<600){
youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
| YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
}else{
youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
}
}
}
}
画面回転後に以下のメソッドを呼び出すとYouTubePlayerのインスタンスがnullなのでNullPointerException
が出ていしまいます。
YouTube Playerインスタンスを参照するメソッド:
//Listener of RelatedVideoFragment
@Override
public void moveActivity(int position){
playerInstance.loadVideo(relateVideoIds.get(position-1));
//Update View
prevVideoIdList.add(relateVideoIds.get(position-1));
videoId=relateVideoIds.get(position-1);
//relateVideoIds is initialized, and relateVideoItems is initialized
relateVideoIds = new ArrayList<>();
relateVideoItems = new ArrayList<>();
relateVideoSearch();
}
//If customer push previous video's button, play previous video
@Override
public void playPrev(){
if(prevVideoIdList!=null&&prevVideoIdList.size()!=1) {
playerInstance.loadVideo(prevVideoIdList.get(prevVideoIdList.size()-2));
videoId = prevVideoIdList.get(prevVideoIdList.size()-2);
prevVideoIdList.remove(prevVideoIdList.size()-2);
relateVideoIds = new ArrayList<>();
relateVideoItems = new ArrayList<>();
relateVideoSearch();
}else if(prevVideoIdList!=null&&prevVideoIdList.size()==1){
finish();
}
}
追記:
画面回転時にレイアウトを変更するので、AndroidManifestでorientation|ScreenSizeを設定する方法はつかえないとおもいます