Android YouTube api v3 - orientation

前端 未结 2 2050
悲哀的现实
悲哀的现实 2020-12-14 12:14

Getting a sample activity up and running using YouTubeBaseActivity, YouTubePlayerView and YouTubePlayer was simple enough. I\'m having trouble with orientation though and ca

2条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-14 12:52

    Leaving this here for others. The Finest Artist's answer worked for me as well, but since I'm using a video player inside a fragment and have to support the AppCompatLibrary as well, here's what I was able to get working:

    YouTubePlayerActivityFragment.java

    public class YouTubePlayerActivityFragment extends YouTubePlayerSupportFragment implements
        YouTubePlayer.OnFullscreenListener {
    
    @SuppressLint("InlinedApi")
    private static final int PORTRAIT_ORIENTATION = Build.VERSION.SDK_INT < 9
            ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
            : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
    
    @SuppressLint("InlinedApi")
    private static final int LANDSCAPE_ORIENTATION = Build.VERSION.SDK_INT < 9
            ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
            : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
    
    private YouTubePlayer.OnFullscreenListener fullScreenListener = null;
    private YouTubePlayer yPlayer = null;
    private boolean mAutoRotation = false;
    
    
    public static YouTubePlayerActivityFragment newInstance(String videoID, String apiKey) {
        YouTubePlayerActivityFragment fragment = new YouTubePlayerActivityFragment();
        Bundle bundle = new Bundle();
        bundle.putString("video_id", videoID);
        bundle.putString("api_key", apiKey);
        fragment.setArguments(bundle);
        fragment.init();
        return fragment;
    }
    
    public YouTubePlayerActivityFragment() {
    
    }
    
    @Override
    public void onCreate(Bundle var1) {
        super.onCreate(var1);
        mAutoRotation = Settings.System.getInt(getActivity().getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1;
        fullScreenListener = this;
    }
    
    private void init() {
        initialize(getArguments().getString("api_key"), new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
                yPlayer = youTubePlayer;
                youTubePlayer.setOnFullscreenListener(fullScreenListener);
                if (mAutoRotation) {
                    youTubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION
                            | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI
                            | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
                            | YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);
                } else {
                    youTubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION
                            | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI
                            | YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);
                }
    
                if (!wasRestored) {
                    yPlayer.loadVideo(getArguments().getString("video_id"));
                }
            }
    
            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
    
            }
        });
    }
    
    @Override
    public void onFullscreen(boolean isFullSize) {
        if (isFullSize) {
            getActivity().setRequestedOrientation(LANDSCAPE_ORIENTATION);
        } else {
            getActivity().setRequestedOrientation(PORTRAIT_ORIENTATION);
        }
    }
    

提交回复
热议问题