0

I am trying to play youtube video, In Picture in Picture mode. For this I am using youtube player api, when I press back button youtube player activity comes in picture in picture mode but video is stops playing, when i press play button then it again comes in full screen and start playing from start.

In full screen after rotating screen video is playing normally and start playing video where it before rotating.

I am not getting continues playing video in PIP.

Here is my code

public class YoutubePIPActivity extends YouTubeBaseActivity implements 
    YouTubePlayer.OnInitializedListener
    {

    private static final String API_KEY = AppConstant.YUTUBE_PLAYER_API_KEY;
    private static String mVIDEO_ID = "o7VVHhK9zf0";
    private boolean isPIPModeEnabled = true; 

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_youtube_pip);

        YouTubePlayerView youTubePlayerView = findViewById(R.id.youtube_player_view);
        youTubePlayerView.initialize(API_KEY, this);
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored)
    {
        /** add listeners to YouTubePlayer instance **/
        player.setPlayerStateChangeListener(playerStateChangeListener);
        player.setPlaybackEventListener(playbackEventListener);

        /** Start buffering **/
        if (!wasRestored) {
            player.cueVideo(mVIDEO_ID);
        }
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult)
    {
        Toast.makeText(this, "Failured to Initialize!", Toast.LENGTH_LONG).show();
    }

    private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {
        @Override
        public void onBuffering(boolean arg0) {
        }
        @Override
        public void onPaused() {
        }
        @Override
        public void onPlaying() {
        }
        @Override
        public void onSeekTo(int arg0) {
        }
        @Override
        public void onStopped() {
        }
    };

    private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {
        @Override
        public void onAdStarted() {
        }
        @Override
        public void onError(YouTubePlayer.ErrorReason arg0) {
        }
        @Override
        public void onLoaded(String arg0) {
        }
        @Override
        public void onLoading() {
        }
        @Override
        public void onVideoEnded() {
        }
        @Override
        public void onVideoStarted() {
        }
    };


    @Override
    public void onBackPressed()
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
                && getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
                && isPIPModeEnabled)
        {
            enterPIPMode();
        }
        else
        {
            super.onBackPressed();
        }
    }

    private void enterPIPMode()
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
                && getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE))
        {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            {
                Rational rational = new Rational(250, 150);
                PictureInPictureParams.Builder params = new PictureInPictureParams.Builder();
                params.setAspectRatio(rational);
                this.enterPictureInPictureMode(params.build());
            } else
            {
                this.enterPictureInPictureMode();
            }

            new Handler().postDelayed(() -> checkPIPPermission(), 30);
        }
    }

    @RequiresApi(Build.VERSION_CODES.N)
    void checkPIPPermission()
    {
        isPIPModeEnabled = isInPictureInPictureMode();
        if(!isInPictureInPictureMode())
        {
            onBackPressed();
        }
    }


    @Override
    protected void onUserLeaveHint()
    {
        super.onUserLeaveHint();
        enterPIPMode();
    }

    @Override
    public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig)
    {
        if(newConfig !=null){
            super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
        }

    }
}

Here is activity defined in manifest

<activity android:name=".ui.activity.youtube.YoutubePIPActivity"
            android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
            android:exported="false"
            android:resizeableActivity="true"
            android:supportsPictureInPicture="true"
            android:theme="@style/Theme.AppCompat.FullScreen"
            tools:targetApi="n"/>
Md. Zakir Hossain
  • 1,082
  • 11
  • 24
dev_swat
  • 1,264
  • 1
  • 12
  • 26

0 Answers0