• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;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&#64;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&#64;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&#64;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