Home | History | Annotate | Download | only in playback
      1 page.title=Imagem em imagem
      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>Neste documento</h2>
     11 <ol>
     12   <li><a href="#declaring">Declarar que sua atividade oferece suporte ao modo de
     13 imagem em imagem</a></li>
     14   <li><a href="#pip_button">Alternar a atividade para o modo de imagem em imagem</a>
     15 </li>
     16   <li><a href="#handling_ui">Lidar com a IU durante o modo de imagem em imagem</a>
     17 </li>
     18   <li><a href="#continuing_playback">Continuar reproduo de vdeo no modo de
     19 imagem em imagem</a></li>
     20   <li><a href="#single_playback">Usar uma nica atividade de reproduo para
     21 imagem em imagem</a></li>
     22   <li><a href="#best">Prticas recomendadas</a></li>
     23 </ol>
     24 
     25 <h2>Veja tambm</h2>
     26 <ol>
     27   <li><a href="{@docRoot}preview/features/multi-window.html">Suporte a
     28 vrias janelas</a></li>
     29 </ol>
     30 
     31 </div>
     32 </div>
     33 
     34 <p>No Android N, os usurios do Android TV agora podem assistir a um vdeo
     35 em uma janela fixada em um canto da tela enquanto navegam em
     36 aplicativos. O modo de imagem em imagem (PIP) permite que os aplicativos executem uma atividade de vdeo
     37 na janela fixada enquanto outra atividade continua em
     38 segundo plano. A janela do PIP permite que os usurios realizem vrias tarefas enquanto usam seu aplicativo, o que os
     39 ajuda a ser mais produtivos.</p>
     40 
     41 <p>Seu aplicativo pode decidir quando acionar o modo de PIP. Veja alguns exemplos de
     42 quando entrar no modo de PIP:</p>
     43 
     44 <ul>
     45 <li>Seu aplicativo pode passar um vdeo para o modo de PIP quando o usurio
     46 sai do vdeo para procurar outro contedo.</li>
     47 <li>Seu aplicativo pode passar um vdeo para o modo de PIP quando um usurio assiste ao final
     48 de um episdio de contedo. A janela principal exibe informaes promocionais ou de resumo
     49 sobre o prximo episdio da srie.</li>
     50 <li>Seu aplicativo pode fornecer uma maneira de os usurios colocarem contedo adicional em uma fila enquanto
     51 assistem a um vdeo. O vdeo continua a ser reproduzido no modo de PIP enquanto a tela principal
     52 exibe uma atividade de seleo de contedo.</li>
     53 </ul>
     54 
     55 <p>A janela do modo de PIP tem 240x135 dp e  mostrada na camada superior de um dos
     56 quatro cantos da tela, escolhido pelo sistema. O usurio pode exibir um
     57 menu de PIP que permite que coloque a janela do PIP em tela inteira ou feche-a
     58 ao pressionar o boto <b>Home</b> do controle remoto. Se outro
     59 vdeo comear a ser reproduzido na tela principal, a janela do PIP ser fechada
     60 automaticamente. Os usurios tambm podem fechar a janela do PIP em Recents.</p>
     61 
     62 <img src="{@docRoot}images/android-7.0/pip-active.png" />
     63 <p class="img-caption"><strong>Figura 1.</strong> Um vdeo no modo de imagem em imagem
     64 visvel no canto da tela enquanto o usurio navega por contedo
     65 na janela principal.</p>
     66 
     67 <p>O PIP utiliza as APIs de vrias janelas disponveis no Android N para
     68 fornecer a janela sobreposta de vdeo fixo. Para adicionar o modo de PIP ao seu aplicativo, voc deve
     69 registrar as atividades que oferecem suporte a PIP, alternar a atividade para o modo de PIP conforme
     70 a necessidade e garantir que os elementos de IU sejam ocultados e que a reproduo do vdeo continue quando
     71 a atividade estiver no modo de PIP.</p>
     72 
     73 <h2 id="declaring">Declarar que sua atividade oferece suporte ao modo de imagem em imagem</h2>
     74 
     75 <p>Por padro, o sistema no oferece suporte ao modo de PIP automaticamente para seus aplicativos.
     76 Se quiser esse suporte para seu aplicativo, registre a atividade
     77 de vdeo no manifesto definindo
     78 <code>android:supportsPictureInPicture</code> e
     79 <code>android:resizeableActivity</code> como <code>true</code>. Alm disso, especifique
     80 que a atividade processa alteraes na configurao de layout de forma que a atividade
     81 no seja reiniciada quando ocorrem essas alteraes durante as transies do modo de 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>Ao registrar a atividade, lembre-se de que, no modo de PIP, ela
     93  mostrada em uma pequena janela sobreposta em uma tela de TV. Atividades de reproduo de
     94 vdeo com uma quantidade mnima de itens de IU oferecem a melhor experincia do usurio. Atividades que contm
     95 pequenos elementos de IU podem no oferecer uma boa experincia do usurio
     96 no modo de PIP, pois ele no conseguir enxergar os detalhes desses elementos
     97 na janela do PIP.</p>
     98 
     99 <h2 id="pip_button">Alternar a atividade para o modo de imagem em imagem</h2>
    100 
    101 Quando precisar colocar a atividade no modo de PIP, chame
    102 <code>Activity.enterPictureInPictureMode()</code>. O exemplo a seguir
    103 entra no modo de PIP quando o usurio seleciona um boto dedicado ao PIP na barra de controle de
    104 uma mdia:</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>Adicionar um boto de PIP  barra de controle de mdia permite que o usurio entre no
    117 modo de PIP com facilidade ao controlar a reproduo de um vdeo.</p>
    118 
    119 <img src="{@docRoot}images/android-7.0/pip-button.png" />
    120 <p class="img-caption"><strong>Figura 1.</strong> Um boto do
    121 modo de imagem em imagem em uma barra de controle de mdia.</p>
    122 
    123 <p>O Android N inclui uma nova classe
    124 <code>PlaybackControlsRow.PictureInPictureAction</code> que define aes do PIP
    125 para a barra de controle e usa o cone do PIP.</p>
    126 
    127 <h2 id="handling_ui">Lidar com a IU durante o modo de imagem em imagem</h2>
    128 
    129 <p>Quando a atividade entra no modo de PIP, ela deve mostrar apenas a reproduo do
    130 vdeo. Remova elementos de IU antes que a atividade entre no modo de PIP
    131 e restaure esses elementos quando a atividade voltar ao modo de tela inteira.
    132 Substitua <code>Activity.onPictureInPictureModeChanged()</code> ou
    133 <code>Fragment.onPictureInPictureModeChanged()</code> e ative ou
    134 desative os elementos de interface conforme for necessrio. Por exemplo:</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 reproduo de vdeo no modo de
    150 imagem em imagem</h2>
    151 
    152 <p>Quando a atividade entra no modo de PIP, o sistema a considera
    153 pausada e chama o mtodo <code>onPause()</code> da atividade. A reproduo
    154 de vdeos no dever ser pausada se a atividade
    155 for pausada devido ao modo de PIP. Verifique o PIP no mtodo
    156 <code>onPause()</code> da atividade e realize a reproduo da forma apropriada. Por
    157 exemplo:</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>Quando a atividade sai do modo de PIP e volta  tela inteira, o
    173 sistema retoma a atividade e chama o mtodo <code>onResume()</code>.</p>
    174 
    175 <h2 id="single_playback">Usar uma nica atividade de reproduo para
    176 imagem em imagem</h2>
    177 
    178 <p>Ao navegar pelo contedo
    179  da tela principal de seu aplicativo, um usurio pode selecionar um novo vdeo enquanto uma atividade de reproduo de vdeo estiver em modo de PIP. Reproduza o novo
    180  vdeo na atividade de reproduo existente em modo de tela cheia em vez de
    181 lanar uma nova atividade que pode confundir o usurio.</p>
    182 
    183 <p>Para que uma nica atividade seja usada para solicitaes de reproduo de vdeo e
    184 com o modo de PIP ativado ou desativado, conforme necessrio, configure o
    185 <code>android:launchMode</code> da atividade para <code>singleTask</code> em seu manifesto.
    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>Na atividade, modifique {@link android.app.Activity#onNewIntent
    197 Activity.onNewIntent()} e processe o novo vdeo, interrompendo qualquer
    198 reproduo existente, caso necessrio.</p>
    199 
    200 <h2 id="best">Prticas recomendadas</h2>
    201 
    202 <p>O PIP  destinado a atividades que reproduzem vdeos em tela inteira. Ao passar
    203 a atividade para o modo de PIP, evite mostrar qualquer coisa que no seja o contedo do vdeo.
    204 Rastreie quando a atividade entrar no modo de PIP e oculte os elementos de IU, conforme descrito
    205 em <a href="#handling_ui">Lidar com a interface durante o modo de imagem em imagem</a>.</p>
    206 
    207 <p>Como a janela do PIP  mostrada como uma janela flutuante no canto da
    208 tela, voc deve evitar exibir informaes essenciais em qualquer rea
    209 da janela principal que possa ser ocultada pela janela do PIP.</p>
    210 
    211 <p>Quando uma atividade est no modo de PIP, ela no recebe foco de entrada por padro. Para
    212 receber eventos de entrada no modo de PIP, use
    213 <code>MediaSession.setMediaButtonReceiver()</code>.</p>
    214