YouTube Player Api перезагружает видео с самого начала при переключении в полноэкранный режим

Я пытался интегрировать API-интерфейс проигрывателя Youtube в свое приложение. Но когда я переключаюсь в полноэкранный режим, возникает пара проблем:

  1. Видео перезагружается с самого начала.
  2. При нажатии кнопки «Назад» в полноэкранном режиме приложение принудительно принимает альбомную ориентацию.

открытый класс YouTubeVideoElement расширяет Элемент реализует YouTubePlayer.OnInitializedListener {

private final String DEVELOPER_KEY = "MY_KEY";
private static final int RECOVERY_DIALOG_REQUEST = 1;

    private RelativeLayout.LayoutParams layoutParams;

    private YouTubePlayerFragment playerFragment;
    private View playerView;
    private ViewGroup viewFrame;
    public State state;
    private Dialog errorDialog;
    private Context context;

    public YouTubeVideoElement(Context context) {
        this.context = context;

    }


    @Override
    public String getType() {
        return null;
    }

    @Override
    public ViewGroup getView() {
        return viewFrame;
    }

    @Override
    public ViewGroup populateView(Context context, JsonObject data, Map<String, String> style) {

        viewFrame = new FrameLayout(context);
        playerView = new FrameLayout(context);
        playerView.setId(R.id.player_view);
        playerView.setVisibility(View.INVISIBLE);
        viewFrame.addView(playerView, -1, -1);
        playerView.setVisibility(View.VISIBLE);
        playerFragment = YouTubePlayerFragment.newInstance();
        playerFragment.initialize(DEVELOPER_KEY, this);
        ((Activity) context).getFragmentManager().beginTransaction().add(R.id.player_view, playerFragment).commit();
        return viewFrame;
    }

    public RelativeLayout.LayoutParams getLayoutParams() {
        return layoutParams;
    }

    public YouTubeVideoElement setLayoutParams(RelativeLayout.LayoutParams layoutParams) {
        this.layoutParams = layoutParams;
        return this;
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {

        Log.d("xxx", "onInitSuccess YTP");
        if (!wasRestored) {
            player.cueVideo("nCgQDjiotG0");
        }
    }


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

        Log.d("xxx", "onInitFailure YTP");
        if (errorReason.isUserRecoverableError()) {
            errorReason.getErrorDialog((Activity) context, RECOVERY_DIALOG_REQUEST).show();
        } else {
            //String errorMessage = String.format(getString(R.string.error_player), errorReason.toString());
            Toast.makeText(context, "error", Toast.LENGTH_LONG).show();
        }
    }
}

person A.B.    schedule 11.01.2016    source источник
comment
ты решил эту проблему?   -  person Dilip    schedule 04.07.2017
comment
Вы смогли найти решение?   -  person coding_idiot    schedule 13.07.2020


Ответы (1)


Попробуйте обновить это в файле AndroidManifest:

 <activity
  android:configChanges="keyboardHidden|orientation|screenSize"
  android:name="com.example.yourClassThatHandlesTheYoutubePlayer"> 

Перечисляет изменения конфигурации, которые действие обработает само. Когда изменение конфигурации происходит во время выполнения, действие закрывается и перезапускается по умолчанию, но объявление конфигурации с этим атрибутом предотвратит перезапуск действия. Вместо этого действие продолжает работать, и вызывается его метод onConfigurationChanged().

Из официальных руководств по Android.

person Ludwig S    schedule 11.01.2016
comment
Как вы можете видеть выше, youtubeplayer не находится в действии напрямую. И я не хочу косвенно менять ориентацию деятельности, в которой она находится (поскольку она является частью моей основной деятельности). Нет ли другого обходного пути, кроме изменения файла манифеста? - person A.B.; 11.01.2016
comment
@А.Б. Что вы передаете его конструктору в качестве контекста? Я имею в виду этот общедоступный YouTubeVideoElement(Context context) { this.context = context; } - person Ludwig S; 11.01.2016
comment
Контекст действия, в котором есть фрагмент, внутри которого находится элемент YouTubeVideoElement. Я не хочу вносить изменения в манифест в этом действии. - person A.B.; 11.01.2016