blob: f0ffd482d86a1f5e3b21c8e214444359bd46e9da [file] [log] [blame]
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>
&lt;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>
&#64;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>
&#64;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>
&#64;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>