page.title=Режим "картинка в картинке" page.keywords=preview,sdk,PIP,Picture-in-picture page.tags=androidn @jd:body
В Android N пользователи Android TV могут смотреть видео в закрепленном окне в углу экрана во время работы в приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео в закрепленном окне одновременно с выполнением другой операции фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что повышает продуктивность работы пользователей.
Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров моментов перехода в режим PIP:
Окно PIP имеет размеры 240x135 dp и отображается на самом верхнем слое в одном из четырех углов экрана по выбору системы. Пользователь может вызвать меню PIP, позволяющее переключать окно PIP в полноэкранный режим, или закрыть окно PIP долгим нажатием кнопки Home на пульте дистанционного управления. Если на главном экране начнется воспроизведение другого видео, окно PIP автоматически закроется. Пользователи также могут закрыть окно PIP, используя экран последних задач.
Режим 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 пользователи не видят деталей этих элементов.
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 с сохранением возможностей управления воспроизведением видео.
В 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()
.