| page.title=Режим "картинка в картинке" |
| page.keywords=preview,sdk,PIP,Picture-in-picture |
| page.tags=androidn |
| |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| |
| <h2>Содержание документа</h2> |
| <ol> |
| <li><a href="#declaring">Декларация поддержки операцией режима |
| "картинка в картинке"</a></li> |
| <li><a href="#pip_button">Переключение операции в режим "картинка в картинке"</a> |
| </li> |
| <li><a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a> |
| </li> |
| <li><a href="#continuing_playback">Продолжение воспроизведения видео в режиме |
| "картинка в картинке"</a></li> |
| <li><a href="#best">Советы и рекомендации</a></li> |
| </ol> |
| |
| <h2>См. также:</h2> |
| <ol> |
| <li><a href="{@docRoot}preview/features/multi-window.html">Поддержка |
| многооконного режима</a></li> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p>В Android N пользователи Android TV могут смотреть видео |
| в закрепленном окне в углу экрана во время работы в |
| приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео |
| в закрепленном окне одновременно с выполнением другой операции |
| фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что |
| повышает продуктивность работы пользователей.</p> |
| |
| <p>Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров |
| моментов перехода в режим PIP:</p> |
| |
| <ul> |
| <li>Ваше приложение может перевести видео в режим PIP, когда пользователь переходит |
| от видео к просмотру другого контента.</li> |
| <li>Ваше приложение может переключить видео в режим PIP, когда пользователь смотрит конец |
| эпизода контента. На основном экране отображается рекламная или сводная информация |
| о следующем эпизоде серии.</li> |
| <li>Ваше приложение может предоставить пользователям возможность добавлять в очередь дополнительный контент при |
| просмотре видео. В режиме PIP видео продолжает воспроизводиться, когда на основном |
| экране отображается операция выбора контента.</li> |
| </ul> |
| |
| <p>Окно PIP имеет размеры 240x135 dp и отображается на самом верхнем слое в одном из |
| четырех углов экрана по выбору системы. Пользователь может вызвать |
| меню PIP, позволяющее переключать окно PIP в полноэкранный режим, или закрыть окно |
| PIP долгим нажатием кнопки <b>Home</b> на пульте дистанционного управления. Если на главном экране начнется воспроизведение другого |
| видео, окно PIP автоматически |
| закроется. Пользователи также могут закрыть окно PIP, используя экран последних задач.</p> |
| |
| <img src="{@docRoot}images/android-7.0/pip-active.png" /> |
| <p class="img-caption"><strong>Рисунок 1.</strong> Видео в режиме "картинка в картинке" |
| отображается в углу экрана, пока пользователь просматривает |
| контент на главном экране.</p> |
| |
| <p>Режим PIP использует многооконные API-интерфейсы в Android N для |
| отображения закрепленного окна с видео на верхнем слое. Чтобы добавить в приложение функцию PIP, вам нужно зарегистрировать |
| операции, поддерживающие PIP, добавить необходимые переключения операции в режим PIP, |
| а также обеспечить скрытие элементов пользовательского интерфейса и воспроизведение видео в то время, когда |
| операция находится в режиме PIP.</p> |
| |
| <h2 id="declaring">Декларация поддержки операцией режима "картинка в картинке"</h2> |
| |
| <p>По умолчанию в системе отсутствует автоматическая поддержка режима PIP для приложений. |
| Если вы хотите, чтобы ваше приложение поддерживало режим PIP, зарегистрируйте операцию |
| воспроизведения видео в манифесте приложения, установив для параметров |
| <code>android:supportsPictureInPicture</code> и |
| <code>android:resizeableActivity</code> значение <code>true</code>. Также укажите, что |
| ваша операция обрабатывает изменения конфигурации макета экрана, чтобы эта операция не |
| запускалась заново в случае изменения макета при переходах в режиме PIP.</p> |
| |
| <pre> |
| <activity android:name="VideoActivity" |
| android:resizeableActivity="true" |
| android:supportsPictureInPicture="true" |
| android:configChanges= |
| "screenSize|smallestScreenSize|screenLayout|orientation" |
| ... |
| </pre> |
| |
| <p>При регистрации операции помните, что в режиме PIP она |
| отображается в небольшом наложенном окне на экране телевизора. Для пользователей наиболее удобны операции |
| воспроизведения видео с минимальным пользовательским интерфейсом. Операции |
| с небольшими элементами пользовательского интерфейса могут оказаться неудобными для пользователей |
| в режиме PIP, потому что в окне PIP пользователи |
| не видят деталей этих элементов.</p> |
| |
| <h2 id="pip_button">Переключение операции в режим "картинка в картинке"</h2> |
| |
| Если вам нужно переключить операцию в режим PIP, вызовите метод |
| <code>Activity.enterPictureInPicture()</code>. В следующем примере показано переключение |
| в режим PIP, когда пользователь нажимает кнопку PIP на панели |
| управления мультимедиа:</p> |
| |
| <pre> |
| @Override |
| public void onActionClicked(Action action) { |
| if (action.getId() == R.id.lb_control_picture_in_picture) { |
| getActivity().enterPictureInPicture(); |
| return; |
| } |
| ... |
| </pre> |
| |
| <p>Добавление кнопки PIP на панель управления мультимедиа позволяет пользователям легко переключаться |
| в режим PIP с сохранением возможностей управления воспроизведением видео.</p> |
| |
| <img src="{@docRoot}images/android-7.0/pip-button.png" /> |
| <p class="img-caption"><strong>Рисунок 1.</strong> Кнопка режима "картинка в картинке" |
| на панели управления мультимедиа.</p> |
| |
| <p>В Android N входит новый класс |
| <code>PlaybackControlsRow.PictureInPictureAction</code>, который определяет действия PIP |
| на панели управления и использует значок PIP.</p> |
| |
| <h2 id="handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</h2> |
| |
| <p>Когда операция переходит в режим PIP, она должна отображать только воспроизведение |
| видео. Уберите элементы пользовательского интерфейса перед переходом операции в режим PIP |
| и восстановите их после возвращения операции в полноэкранный режим. |
| Переопределите <code>Activity.onPictureInPictureChanged()</code> или |
| <code>Fragment.onPictureInPictureChanged()</code> и включайте или |
| отключайте элементы пользовательского интерфейса по мере необходимости, например:</p> |
| |
| <pre> |
| @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. |
| ... |
| } |
| } |
| </pre> |
| |
| <h2 id="continuing_playback">Продолжение воспроизведения видео в режиме |
| "картинка в картинке"</h2> |
| |
| <p>Когда операция переключается в режим PIP, система видит ее в состоянии |
| паузы и вызывает метод <code>onPause()</code> этой операции. При этом воспроизведение видео |
| должно продолжаться без паузы, если операция |
| приостановлена в режиме PIP. Проверьте режим PIP в методе |
| <code>onPause()</code> своей операции и обеспечьте обработку воспроизведения соответствующим образом, |
| например:</p> |
| |
| <pre> |
| @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 |
| ... |
| } |
| </pre> |
| |
| <p>Когда операция возвращается из режима PIP в полноэкранный режим, система |
| возобновляет выполнение операции и вызывает метод<code>onResume()</code> вашего приложения.</p> |
| |
| <h2 id="best">Советы и рекомендации</h2> |
| |
| <p>Режим PIP предназначается для операций, воспроизводящих видео в полноэкранном режиме. При переключении |
| операции в режим PIP следует избегать отображения любых элементов, кроме видео. |
| Отслеживайте моменты перехода операции в режим PIP и скрывайте элементы пользовательского интерфейса, как описано в |
| разделе <a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a>.</p> |
| |
| <p>Поскольку окно PIP отображается в виде плавающего окна в углу экрана, |
| следует избегать отображения критически важной информации на основном экране |
| в любой области, которая может быть закрыта окном PIP.</p> |
| |
| <p>По умолчанию фокус ввода не переключается на операцию, которая находится в режиме PIP. Для |
| получения событий ввода в режиме PIP следует использовать |
| <code>MediaSession.setMediaButtonReceiver()</code>.</p> |