• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Modo Picture-in-picture
2page.keywords=preview,sdk,PIP,Picture-in-picture
3page.tags=androidn
4
5@jd:body
6
7<div id="qv-wrapper">
8<div id="qv">
9
10<h2>En este documento</h2>
11<ol>
12  <li><a href="#declaring">Declarar que la actividad permite
13el modo Picture-in-Picture</a></li>
14  <li><a href="#pip_button">Cambiar la actividad al modo Picture-in-picture</a>
15</li>
16  <li><a href="#handling_ui">Gestionar las IU durante el modo Picture-in-picture</a>
17</li>
18  <li><a href="#continuing_playback">Continuar la reproducción de video durante
19el modo Picture-in-picture</a></li>
20  <li><a href="#single_playback">Usar una única actividad de reproducción para
21el modo Picture-in-picture</a></li>
22  <li><a href="#best">Prácticas recomendadas</a></li>
23</ol>
24
25<h2>Consulta también</h2>
26<ol>
27  <li><a href="{@docRoot}preview/features/multi-window.html">Compatibilidad con
28ventanas múltiples</a></li>
29</ol>
30
31</div>
32</div>
33
34<p>Con Android N, los usuarios de Android TV ahora pueden ver un video
35en una ventana fija que se ubica en una esquina de la pantalla mientras navegan dentro de
36aplicaciones. El modo picture-in-picture (PIP) permite que las aplicaciones reproduzcan un video
37en una ventana fija mientras se lleva a cabo otra actividad
38en el fondo. La ventana de PIP les permite a los usuarios realizar múltiples tareas mientras usan tu aplicación, lo cual les permite
39ser más productivos.</p>
40
41<p>Tu aplicación puede decidir cuándo activar el modo PIP. Aquí te mostramos algunos ejemplos de
42situaciones en las que se podría usar el modo PIP:</p>
43
44<ul>
45<li>Tu aplicación puede pasar un video al modo PIP cuando el usuario retrocede
46en la navegación desde el video para explorar otro contenido.</li>
47<li>También puede hacerlo mientras el usuario está viendo el final
48de un episodio de contenido. La pantalla principal muestra información promocional
49o de resumen sobre el próximo capítulo de la serie.</li>
50<li>Tu aplicación puede brindarles a los usuarios una forma de poner en cola otro contenido mientras
51miran un video. El video continúa reproduciéndose en modo PIP mientras la pantalla
52principal muestra una actividad de selección de contenido.</li>
53</ul>
54
55<p>La ventana de PIP es de 240x135 dp y se muestra en la capa delantera en una de las
56cuatro esquinas de la pantalla que el sistema elige. El usuario puede acceder a un menú de
57PIP que le permite activar o desactivar la ventana de PIP a pantalla completa o cerrarla
58presionando el botón <b>Home</b> en el control remoto. Si se comienza a reproducir
59otro video en la pantalla principal, la ventana de PIP se cierra
60automáticamente. Los usuarios también pueden cerrar la ventana de PIP desde Recents.</p>
61
62<img src="{@docRoot}preview/images/pip-active.png" />
63<p class="img-caption"><strong>Imagen 1.</strong> Un video picture-in-picture
64visible en una esquina de la pantalla mientras el usuario explora contenido
65en la pantalla principal.</p>
66
67<p>El modo PIP aprovecha las API de ventanas múltiples disponibles en Android N para
68brindar la ventana superpuesta fija de video. Para agregarle el modo PIP a tu aplicación, debes
69registrar las actividades que permitan este modo, cambiar la actividad al modo PIP según
70sea necesario y asegurarte de que los elementos de IU se oculten y que la reproducción de video continúe mientras
71la actividad se encuentra en modo PIP.</p>
72
73<h2 id="declaring">Declarar que la actividad permite el modo picture-in-picture</h2>
74
75<p>De forma predeterminada, el sistema no permite el modo PIP para aplicaciones automáticamente.
76Si deseas permitir este modo en tu aplicaciones, registra la actividad
77de video en tu manifiesto configurando
78<code>android:supportsPictureInPicture</code> y
79<code>android:resizeableActivity</code> en <code>true</code>. Además, debes especificar
80que tu actividad gestiona los cambios de configuración de la presentación para que la actividad
81no se reinicie cuando ocurran cambios de presentación durante las transiciones en el modo PIP.</p>
82
83<pre>
84&lt;activity android:name="VideoActivity"
85    android:resizeableActivity="true"
86    android:supportsPictureInPicture="true"
87    android:configChanges=
88        "screenSize|smallestScreenSize|screenLayout|orientation"
89    ...
90</pre>
91
92<p>Cuando registres la actividad, ten en cuenta que, en el modo PIP, la
93actividad se muestra en una ventana superpuesta pequeña en una pantalla de TV. Las actividades de reproducción
94de videos con IU mínimas brindan la mejor experiencia de usuario. Las actividades que
95incluyen elementos de IU pequeños podrían no brindar una buena experiencia de usuario
96cuando se cambian al modo PIP, porque los usuarios no podrán ver los detalles de los elementos de IU
97en la ventana PIP.</p>
98
99<h2 id="pip_button">Cambiar la actividad al modo Picture-in-picture</h2>
100
101Cuando necesites cambiar la actividad al modo PIP, llama a
102<code>Activity.enterPictureInPictureMode()</code>. En el siguiente ejemplo, se
103cambia al modo PIP cuando el usuario selecciona un botón PIP especial en una barra
104de control de medios:</p>
105
106<pre>
107&#64;Override
108public void onActionClicked(Action action) {
109    if (action.getId() == R.id.lb_control_picture_in_picture) {
110        getActivity().enterPictureInPictureMode();
111        return;
112    }
113    ...
114</pre>
115
116<p>Agregar un botón PIP a la barra de control de medios le permite al usuario cambiar
117fácilmente al modo PIP y seguir controlando la reproducción de video.</p>
118
119<img src="{@docRoot}preview/images/pip-button.png" />
120<p class="img-caption"><strong>Imagen 1.</strong> Un botón
121PIP en una barra de control de medios.</p>
122
123<p>Android N incluye una nueva clase
124<code>PlaybackControlsRow.PictureInPictureAction</code> que define
125las acciones de PIP de la barra de control y usa el ícono PIP.</p>
126
127<h2 id="handling_ui">Gestionar las IU durante el modo picture-in-picture</h2>
128
129<p>Cuando la actividad ingresa al modo PIP, esta solo debería mostrar la reproducción
130de video. Debes quitar los elementos de IU antes de que la actividad ingrese al modo PIP
131y volver a mostrarlos cuando la actividad vuelva al modo de pantalla completa.
132Anula <code>Activity.onPictureInPictureModeChanged()</code> o
133<code>Fragment.onPictureInPictureModeChanged()</code> y habilita
134o inhabilita los elementos de IU según sea necesario, por ejemplo:</p>
135
136<pre>
137&#64;Override
138public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
139    if (isInPictureInPictureMode) {
140        // Hide the controls in picture-in-picture mode.
141        ...
142    } else {
143        // Restore the playback UI based on the playback status.
144        ...
145    }
146}
147</pre>
148
149<h2 id="continuing_playback">Continuar la reproducción de video durante
150el modo Picture-in-picture</h2>
151
152<p>Cuando la actividad cambia al modo PIP, el sistema considera que se encuentra en
153pausa y llama al método <code>onPause()</code> de la actividad. La reproducción
154de video no debería pausarse y debería continuar si la actividad se
155pausa debido al modo PIP. Busca el modo PIP en el método
156<code>onPause()</code> de la actividad y controla la reproducción según corresponda, por
157ejemplo:</p>
158
159<pre>
160&#64;Override
161public void onPause() {
162    // If called while in PIP mode, do not pause playback
163    if (isInPictureInPictureMode()) {
164        // Continue playback
165        ...
166    }
167    // If paused but not in PIP, pause playback if necessary
168    ...
169}
170</pre>
171
172<p>Cuando la actividad sale del modo PIP y vuelve al modo de pantalla completa, el
173sistema reinicia la actividad y llama al método <code>onResume()</code>.</p>
174
175<h2 id="single_playback">Usar una única actividad de reproducción para
176el modo Picture-in-picture</h2>
177
178<p>En tu aplicación, un usuario puede seleccionar un nuevo video cuando busca contenido en la
179pantalla principal, mientras una actividad de reproducción de video está en modo PIP. Reproduce el nuevo
180video en la actividad de reproducción actual en modo de pantalla completa, en lugar de
181iniciar una nueva actividad que podría confundir al usuario.</p>
182
183<p>A fin de garantizar que se utilice una única actividad para las solicitudes de reproducción de video y que esta
184 ingrese en el modo PIP o salga de este cuando sea necesario, configura el
185<code>android:launchMode</code> de la actividad en <code>singleTask</code>, en el manifiesto:
186</p>
187
188<pre>
189&lt;activity android:name="VideoActivity"
190    ...
191    android:supportsPictureInPicture="true"
192    android:launchMode="singleTask"
193    ...
194</pre>
195
196<p>En tu actividad, anula {@link android.app.Activity#onNewIntent
197Activity.onNewIntent()} y administra el nuevo video, deteniendo cualquier reproducción
198de video actual si es necesario.</p>
199
200<h2 id="best">Prácticas recomendadas</h2>
201
202<p>El modo PIP está diseñado para actividades que reproducen un video en pantalla completa. Cuando cambies la
203actividad al modo PIP, evita que se muestre cualquier elemento que no sea el contenido del video.
204Rastrea el cambio a modo PIP de la actividad y oculta los elementos de IU, como se explica
205en la sección <a href="#handling_ui">Gestionar las IU durante el modo picture-in-picture</a>.</p>
206
207<p>Debido a que la ventana de PIP se muestra como una ventana flotante en una
208esquina de la pantalla, debes evitar mostrar información importante en la pantalla principal
209en cualquier área que pueda quedar oculta detrás de la ventana de PIP.</p>
210
211<p>Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalización en las entradas. Para
212recibir eventos de entradas durante este modo, usa
213<code>MediaSession.setMediaButtonReceiver()</code>.</p>
214