1page.title=Режим "картинка в картинке" 2page.keywords=preview,sdk,PIP,Picture-in-picture 3page.tags=androidn 4 5@jd:body 6 7<div id="tb-wrapper"> 8<div id="tb"> 9 10<h2>Содержание документа</h2> 11<ol> 12 <li><a href="#declaring">Декларация поддержки операцией режима 13"картинка в картинке"</a></li> 14 <li><a href="#pip_button">Переключение операции в режим "картинка в картинке"</a> 15</li> 16 <li><a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a> 17</li> 18 <li><a href="#continuing_playback">Продолжение воспроизведения видео в режиме 19"картинка в картинке"</a></li> 20 <li><a href="#best">Советы и рекомендации</a></li> 21</ol> 22 23<h2>См. также:</h2> 24<ol> 25 <li><a href="{@docRoot}preview/features/multi-window.html">Поддержка 26многооконного режима</a></li> 27</ol> 28 29</div> 30</div> 31 32<p>В Android N пользователи Android TV могут смотреть видео 33в закрепленном окне в углу экрана во время работы в 34приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео 35в закрепленном окне одновременно с выполнением другой операции 36фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что 37повышает продуктивность работы пользователей.</p> 38 39<p>Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров 40моментов перехода в режим PIP:</p> 41 42<ul> 43<li>Ваше приложение может перевести видео в режим PIP, когда пользователь переходит 44от видео к просмотру другого контента.</li> 45<li>Ваше приложение может переключить видео в режим PIP, когда пользователь смотрит конец 46эпизода контента. На основном экране отображается рекламная или сводная информация 47о следующем эпизоде серии.</li> 48<li>Ваше приложение может предоставить пользователям возможность добавлять в очередь дополнительный контент при 49просмотре видео. В режиме PIP видео продолжает воспроизводиться, когда на основном 50экране отображается операция выбора контента.</li> 51</ul> 52 53<p>Окно PIP имеет размеры 240x135 dp и отображается на самом верхнем слое в одном из 54четырех углов экрана по выбору системы. Пользователь может вызвать 55меню PIP, позволяющее переключать окно PIP в полноэкранный режим, или закрыть окно 56PIP долгим нажатием кнопки <b>Home</b> на пульте дистанционного управления. Если на главном экране начнется воспроизведение другого 57видео, окно PIP автоматически 58закроется. Пользователи также могут закрыть окно PIP, используя экран последних задач.</p> 59 60<img src="{@docRoot}images/android-7.0/pip-active.png" /> 61<p class="img-caption"><strong>Рисунок 1.</strong> Видео в режиме "картинка в картинке" 62 отображается в углу экрана, пока пользователь просматривает 63контент на главном экране.</p> 64 65<p>Режим PIP использует многооконные API-интерфейсы в Android N для 66отображения закрепленного окна с видео на верхнем слое. Чтобы добавить в приложение функцию PIP, вам нужно зарегистрировать 67операции, поддерживающие PIP, добавить необходимые переключения операции в режим PIP, 68а также обеспечить скрытие элементов пользовательского интерфейса и воспроизведение видео в то время, когда 69операция находится в режиме PIP.</p> 70 71<h2 id="declaring">Декларация поддержки операцией режима "картинка в картинке"</h2> 72 73<p>По умолчанию в системе отсутствует автоматическая поддержка режима PIP для приложений. 74Если вы хотите, чтобы ваше приложение поддерживало режим PIP, зарегистрируйте операцию 75воспроизведения видео в манифесте приложения, установив для параметров 76<code>android:supportsPictureInPicture</code> и 77<code>android:resizeableActivity</code> значение <code>true</code>. Также укажите, что 78ваша операция обрабатывает изменения конфигурации макета экрана, чтобы эта операция не 79запускалась заново в случае изменения макета при переходах в режиме PIP.</p> 80 81<pre> 82<activity android:name="VideoActivity" 83 android:resizeableActivity="true" 84 android:supportsPictureInPicture="true" 85 android:configChanges= 86 "screenSize|smallestScreenSize|screenLayout|orientation" 87 ... 88</pre> 89 90<p>При регистрации операции помните, что в режиме PIP она 91отображается в небольшом наложенном окне на экране телевизора. Для пользователей наиболее удобны операции 92воспроизведения видео с минимальным пользовательским интерфейсом. Операции 93с небольшими элементами пользовательского интерфейса могут оказаться неудобными для пользователей 94в режиме PIP, потому что в окне PIP пользователи 95не видят деталей этих элементов.</p> 96 97<h2 id="pip_button">Переключение операции в режим "картинка в картинке"</h2> 98 99Если вам нужно переключить операцию в режим PIP, вызовите метод 100<code>Activity.enterPictureInPicture()</code>. В следующем примере показано переключение 101в режим PIP, когда пользователь нажимает кнопку PIP на панели 102управления мультимедиа:</p> 103 104<pre> 105@Override 106public void onActionClicked(Action action) { 107 if (action.getId() == R.id.lb_control_picture_in_picture) { 108 getActivity().enterPictureInPicture(); 109 return; 110 } 111 ... 112</pre> 113 114<p>Добавление кнопки PIP на панель управления мультимедиа позволяет пользователям легко переключаться 115в режим PIP с сохранением возможностей управления воспроизведением видео.</p> 116 117<img src="{@docRoot}images/android-7.0/pip-button.png" /> 118<p class="img-caption"><strong>Рисунок 1.</strong> Кнопка режима "картинка в картинке" 119на панели управления мультимедиа.</p> 120 121<p>В Android N входит новый класс 122<code>PlaybackControlsRow.PictureInPictureAction</code>, который определяет действия PIP 123на панели управления и использует значок PIP.</p> 124 125<h2 id="handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</h2> 126 127<p>Когда операция переходит в режим PIP, она должна отображать только воспроизведение 128видео. Уберите элементы пользовательского интерфейса перед переходом операции в режим PIP 129и восстановите их после возвращения операции в полноэкранный режим. 130Переопределите <code>Activity.onPictureInPictureChanged()</code> или 131<code>Fragment.onPictureInPictureChanged()</code> и включайте или 132отключайте элементы пользовательского интерфейса по мере необходимости, например:</p> 133 134<pre> 135@Override 136public void onPictureInPictureChanged(boolean inPictureInPicture) { 137 if (inPictureInPicture) { 138 // Hide the controls in picture-in-picture mode. 139 ... 140 } else { 141 // Restore the playback UI based on the playback status. 142 ... 143 } 144} 145</pre> 146 147<h2 id="continuing_playback">Продолжение воспроизведения видео в режиме 148"картинка в картинке"</h2> 149 150<p>Когда операция переключается в режим PIP, система видит ее в состоянии 151паузы и вызывает метод <code>onPause()</code> этой операции. При этом воспроизведение видео 152должно продолжаться без паузы, если операция 153приостановлена в режиме PIP. Проверьте режим PIP в методе 154<code>onPause()</code> своей операции и обеспечьте обработку воспроизведения соответствующим образом, 155например:</p> 156 157<pre> 158@Override 159public void onPause() { 160 // If called due to PIP, do not pause playback 161 if (inPictureInPicture()) { 162 // Continue playback 163 ... 164 } 165 // If paused but not in PIP, pause playback if necessary 166 ... 167} 168</pre> 169 170<p>Когда операция возвращается из режима PIP в полноэкранный режим, система 171возобновляет выполнение операции и вызывает метод<code>onResume()</code> вашего приложения.</p> 172 173<h2 id="best">Советы и рекомендации</h2> 174 175<p>Режим PIP предназначается для операций, воспроизводящих видео в полноэкранном режиме. При переключении 176операции в режим PIP следует избегать отображения любых элементов, кроме видео. 177Отслеживайте моменты перехода операции в режим PIP и скрывайте элементы пользовательского интерфейса, как описано в 178разделе <a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a>.</p> 179 180<p>Поскольку окно PIP отображается в виде плавающего окна в углу экрана, 181следует избегать отображения критически важной информации на основном экране 182в любой области, которая может быть закрыта окном PIP.</p> 183 184<p>По умолчанию фокус ввода не переключается на операцию, которая находится в режиме PIP. Для 185получения событий ввода в режиме PIP следует использовать 186<code>MediaSession.setMediaButtonReceiver()</code>.</p> 187