page.title=Режим "картинка в картинке" page.keywords=preview,sdk,PIP,Picture-in-picture page.tags=androidn @jd:body

Содержание документа

  1. Декларация поддержки операцией режима "картинка в картинке"
  2. Переключение операции в режим "картинка в картинке"
  3. Работа пользовательского интерфейса в режиме "картинка в картинке"
  4. Продолжение воспроизведения видео в режиме "картинка в картинке"
  5. Советы и рекомендации

См. также:

  1. Поддержка многооконного режима

В Android N пользователи Android TV могут смотреть видео в закрепленном окне в углу экрана во время работы в приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео в закрепленном окне одновременно с выполнением другой операции фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что повышает продуктивность работы пользователей.

Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров моментов перехода в режим PIP:

Окно PIP имеет размеры 240x135 dp и отображается на самом верхнем слое в одном из четырех углов экрана по выбору системы. Пользователь может вызвать меню PIP, позволяющее переключать окно PIP в полноэкранный режим, или закрыть окно PIP долгим нажатием кнопки Home на пульте дистанционного управления. Если на главном экране начнется воспроизведение другого видео, окно PIP автоматически закроется. Пользователи также могут закрыть окно PIP, используя экран последних задач.

Рисунок 1. Видео в режиме "картинка в картинке" отображается в углу экрана, пока пользователь просматривает контент на главном экране.

Режим PIP использует многооконные API-интерфейсы в Android N для отображения закрепленного окна с видео на верхнем слое. Чтобы добавить в приложение функцию PIP, вам нужно зарегистрировать операции, поддерживающие PIP, добавить необходимые переключения операции в режим PIP, а также обеспечить скрытие элементов пользовательского интерфейса и воспроизведение видео в то время, когда операция находится в режиме PIP.

Декларация поддержки операцией режима "картинка в картинке"

По умолчанию в системе отсутствует автоматическая поддержка режима PIP для приложений. Если вы хотите, чтобы ваше приложение поддерживало режим PIP, зарегистрируйте операцию воспроизведения видео в манифесте приложения, установив для параметров android:supportsPictureInPicture и android:resizeableActivity значение true. Также укажите, что ваша операция обрабатывает изменения конфигурации макета экрана, чтобы эта операция не запускалась заново в случае изменения макета при переходах в режиме PIP.

<activity android:name="VideoActivity"
    android:resizeableActivity="true"
    android:supportsPictureInPicture="true"
    android:configChanges=
        "screenSize|smallestScreenSize|screenLayout|orientation"
    ...

При регистрации операции помните, что в режиме PIP она отображается в небольшом наложенном окне на экране телевизора. Для пользователей наиболее удобны операции воспроизведения видео с минимальным пользовательским интерфейсом. Операции с небольшими элементами пользовательского интерфейса могут оказаться неудобными для пользователей в режиме PIP, потому что в окне PIP пользователи не видят деталей этих элементов.

Переключение операции в режим "картинка в картинке"

Если вам нужно переключить операцию в режим PIP, вызовите метод Activity.enterPictureInPicture(). В следующем примере показано переключение в режим PIP, когда пользователь нажимает кнопку PIP на панели управления мультимедиа:

@Override
public void onActionClicked(Action action) {
    if (action.getId() == R.id.lb_control_picture_in_picture) {
        getActivity().enterPictureInPicture();
        return;
    }
    ...

Добавление кнопки PIP на панель управления мультимедиа позволяет пользователям легко переключаться в режим PIP с сохранением возможностей управления воспроизведением видео.

Рисунок 1. Кнопка режима "картинка в картинке" на панели управления мультимедиа.

В Android N входит новый класс PlaybackControlsRow.PictureInPictureAction, который определяет действия PIP на панели управления и использует значок PIP.

Работа пользовательского интерфейса в режиме "картинка в картинке"

Когда операция переходит в режим PIP, она должна отображать только воспроизведение видео. Уберите элементы пользовательского интерфейса перед переходом операции в режим PIP и восстановите их после возвращения операции в полноэкранный режим. Переопределите Activity.onPictureInPictureChanged() или Fragment.onPictureInPictureChanged() и включайте или отключайте элементы пользовательского интерфейса по мере необходимости, например:

@Override
public void onPictureInPictureChanged(boolean inPictureInPicture) {
    if (inPictureInPicture) {
        // Hide the controls in picture-in-picture mode.
        ...
    } else {
        // Restore the playback UI based on the playback status.
        ...
    }
}

Продолжение воспроизведения видео в режиме "картинка в картинке"

Когда операция переключается в режим PIP, система видит ее в состоянии паузы и вызывает метод onPause() этой операции. При этом воспроизведение видео должно продолжаться без паузы, если операция приостановлена в режиме PIP. Проверьте режим PIP в методе onPause() своей операции и обеспечьте обработку воспроизведения соответствующим образом, например:

@Override
public void onPause() {
    // If called due to PIP, do not pause playback
    if (inPictureInPicture()) {
        // Continue playback
        ...
    }
    // If paused but not in PIP, pause playback if necessary
    ...
}

Когда операция возвращается из режима PIP в полноэкранный режим, система возобновляет выполнение операции и вызывает методonResume() вашего приложения.

Советы и рекомендации

Режим PIP предназначается для операций, воспроизводящих видео в полноэкранном режиме. При переключении операции в режим PIP следует избегать отображения любых элементов, кроме видео. Отслеживайте моменты перехода операции в режим PIP и скрывайте элементы пользовательского интерфейса, как описано в разделе Работа пользовательского интерфейса в режиме "картинка в картинке".

Поскольку окно PIP отображается в виде плавающего окна в углу экрана, следует избегать отображения критически важной информации на основном экране в любой области, которая может быть закрыта окном PIP.

По умолчанию фокус ввода не переключается на операцию, которая находится в режиме PIP. Для получения событий ввода в режиме PIP следует использовать MediaSession.setMediaButtonReceiver().