Home | History | Annotate | Download | only in playback
      1 page.title=Modo Picture-in-picture
      2 page.keywords=preview,sdk,PIP,Picture-in-picture
      3 page.tags=androidn
      4 
      5 @jd:body
      6 
      7 <div id="tb-wrapper">
      8 <div id="tb">
      9 
     10 <h2>En este documento</h2>
     11 <ol>
     12   <li><a href="#declaring">Declarar que la actividad permite
     13 el 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 reproduccin de video durante
     19 el modo Picture-in-picture</a></li>
     20   <li><a href="#single_playback">Usar una nica actividad de reproduccin para
     21 el modo Picture-in-picture</a></li>
     22   <li><a href="#best">Prcticas recomendadas</a></li>
     23 </ol>
     24 
     25 <h2>Consulta tambin</h2>
     26 <ol>
     27   <li><a href="{@docRoot}preview/features/multi-window.html">Compatibilidad con
     28 ventanas mltiples</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
     35 en una ventana fija que se ubica en una esquina de la pantalla mientras navegan dentro de
     36 aplicaciones. El modo picture-in-picture (PIP) permite que las aplicaciones reproduzcan un video
     37 en una ventana fija mientras se lleva a cabo otra actividad
     38 en el fondo. La ventana de PIP les permite a los usuarios realizar mltiples tareas mientras usan tu aplicacin, lo cual les permite
     39 ser ms productivos.</p>
     40 
     41 <p>Tu aplicacin puede decidir cundo activar el modo PIP. Aqu te mostramos algunos ejemplos de
     42 situaciones en las que se podra usar el modo PIP:</p>
     43 
     44 <ul>
     45 <li>Tu aplicacin puede pasar un video al modo PIP cuando el usuario retrocede
     46 en la navegacin desde el video para explorar otro contenido.</li>
     47 <li>Tambin puede hacerlo mientras el usuario est viendo el final
     48 de un episodio de contenido. La pantalla principal muestra informacin promocional
     49 o de resumen sobre el prximo captulo de la serie.</li>
     50 <li>Tu aplicacin puede brindarles a los usuarios una forma de poner en cola otro contenido mientras
     51 miran un video. El video contina reproducindose en modo PIP mientras la pantalla
     52 principal muestra una actividad de seleccin 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
     56 cuatro esquinas de la pantalla que el sistema elige. El usuario puede acceder a un men de
     57 PIP que le permite activar o desactivar la ventana de PIP a pantalla completa o cerrarla
     58 presionando el botn <b>Home</b> en el control remoto. Si se comienza a reproducir
     59 otro video en la pantalla principal, la ventana de PIP se cierra
     60 automticamente. Los usuarios tambin pueden cerrar la ventana de PIP desde Recents.</p>
     61 
     62 <img src="{@docRoot}images/android-7.0/pip-active.png" />
     63 <p class="img-caption"><strong>Imagen 1.</strong> Un video picture-in-picture
     64 visible en una esquina de la pantalla mientras el usuario explora contenido
     65 en la pantalla principal.</p>
     66 
     67 <p>El modo PIP aprovecha las API de ventanas mltiples disponibles en Android N para
     68 brindar la ventana superpuesta fija de video. Para agregarle el modo PIP a tu aplicacin, debes
     69 registrar las actividades que permitan este modo, cambiar la actividad al modo PIP segn
     70 sea necesario y asegurarte de que los elementos de IU se oculten y que la reproduccin de video contine mientras
     71 la 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 automticamente.
     76 Si deseas permitir este modo en tu aplicaciones, registra la actividad
     77 de video en tu manifiesto configurando
     78 <code>android:supportsPictureInPicture</code> y
     79 <code>android:resizeableActivity</code> en <code>true</code>. Adems, debes especificar
     80 que tu actividad gestiona los cambios de configuracin de la presentacin para que la actividad
     81 no se reinicie cuando ocurran cambios de presentacin 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
     93 actividad se muestra en una ventana superpuesta pequea en una pantalla de TV. Las actividades de reproduccin
     94 de videos con IU mnimas brindan la mejor experiencia de usuario. Las actividades que
     95 incluyen elementos de IU pequeos podran no brindar una buena experiencia de usuario
     96 cuando se cambian al modo PIP, porque los usuarios no podrn ver los detalles de los elementos de IU
     97 en la ventana PIP.</p>
     98 
     99 <h2 id="pip_button">Cambiar la actividad al modo Picture-in-picture</h2>
    100 
    101 Cuando necesites cambiar la actividad al modo PIP, llama a
    102 <code>Activity.enterPictureInPictureMode()</code>. En el siguiente ejemplo, se
    103 cambia al modo PIP cuando el usuario selecciona un botn PIP especial en una barra
    104 de control de medios:</p>
    105 
    106 <pre>
    107 &#64;Override
    108 public 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 botn PIP a la barra de control de medios le permite al usuario cambiar
    117 fcilmente al modo PIP y seguir controlando la reproduccin de video.</p>
    118 
    119 <img src="{@docRoot}images/android-7.0/pip-button.png" />
    120 <p class="img-caption"><strong>Imagen 1.</strong> Un botn
    121 PIP en una barra de control de medios.</p>
    122 
    123 <p>Android N incluye una nueva clase
    124 <code>PlaybackControlsRow.PictureInPictureAction</code> que define
    125 las 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 debera mostrar la reproduccin
    130 de video. Debes quitar los elementos de IU antes de que la actividad ingrese al modo PIP
    131 y volver a mostrarlos cuando la actividad vuelva al modo de pantalla completa.
    132 Anula <code>Activity.onPictureInPictureModeChanged()</code> o
    133 <code>Fragment.onPictureInPictureModeChanged()</code> y habilita
    134 o inhabilita los elementos de IU segn sea necesario, por ejemplo:</p>
    135 
    136 <pre>
    137 &#64;Override
    138 public 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 reproduccin de video durante
    150 el modo Picture-in-picture</h2>
    151 
    152 <p>Cuando la actividad cambia al modo PIP, el sistema considera que se encuentra en
    153 pausa y llama al mtodo <code>onPause()</code> de la actividad. La reproduccin
    154 de video no debera pausarse y debera continuar si la actividad se
    155 pausa debido al modo PIP. Busca el modo PIP en el mtodo
    156 <code>onPause()</code> de la actividad y controla la reproduccin segn corresponda, por
    157 ejemplo:</p>
    158 
    159 <pre>
    160 &#64;Override
    161 public 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
    173 sistema reinicia la actividad y llama al mtodo <code>onResume()</code>.</p>
    174 
    175 <h2 id="single_playback">Usar una nica actividad de reproduccin para
    176 el modo Picture-in-picture</h2>
    177 
    178 <p>En tu aplicacin, un usuario puede seleccionar un nuevo video cuando busca contenido en la
    179 pantalla principal, mientras una actividad de reproduccin de video est en modo PIP. Reproduce el nuevo
    180 video en la actividad de reproduccin actual en modo de pantalla completa, en lugar de
    181 iniciar una nueva actividad que podra confundir al usuario.</p>
    182 
    183 <p>A fin de garantizar que se utilice una nica actividad para las solicitudes de reproduccin 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
    197 Activity.onNewIntent()} y administra el nuevo video, deteniendo cualquier reproduccin
    198 de video actual si es necesario.</p>
    199 
    200 <h2 id="best">Prcticas recomendadas</h2>
    201 
    202 <p>El modo PIP est diseado para actividades que reproducen un video en pantalla completa. Cuando cambies la
    203 actividad al modo PIP, evita que se muestre cualquier elemento que no sea el contenido del video.
    204 Rastrea el cambio a modo PIP de la actividad y oculta los elementos de IU, como se explica
    205 en la seccin <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
    208 esquina de la pantalla, debes evitar mostrar informacin importante en la pantalla principal
    209 en cualquier rea que pueda quedar oculta detrs de la ventana de PIP.</p>
    210 
    211 <p>Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalizacin en las entradas. Para
    212 recibir eventos de entradas durante este modo, usa
    213 <code>MediaSession.setMediaButtonReceiver()</code>.</p>
    214