1page.title=Imagem em imagem 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>Neste documento</h2> 11<ol> 12 <li><a href="#declaring">Declarar que sua atividade oferece suporte ao modo de 13imagem 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 reprodução de vídeo no modo de 19imagem em imagem</a></li> 20 <li><a href="#single_playback">Usar uma única atividade de reprodução para 21imagem em imagem</a></li> 22 <li><a href="#best">Práticas recomendadas</a></li> 23</ol> 24 25<h2>Veja também</h2> 26<ol> 27 <li><a href="{@docRoot}preview/features/multi-window.html">Suporte a 28várias janelas</a></li> 29</ol> 30 31</div> 32</div> 33 34<p>No Android N, os usuários do Android TV agora podem assistir a um vídeo 35em uma janela fixada em um canto da tela enquanto navegam em 36aplicativos. O modo de imagem em imagem (PIP) permite que os aplicativos executem uma atividade de vídeo 37na janela fixada enquanto outra atividade continua em 38segundo plano. A janela do PIP permite que os usuários realizem várias tarefas enquanto usam seu aplicativo, o que os 39ajuda a ser mais produtivos.</p> 40 41<p>Seu aplicativo pode decidir quando acionar o modo de PIP. Veja alguns exemplos de 42quando entrar no modo de PIP:</p> 43 44<ul> 45<li>Seu aplicativo pode passar um vídeo para o modo de PIP quando o usuário 46sai do vídeo para procurar outro conteúdo.</li> 47<li>Seu aplicativo pode passar um vídeo para o modo de PIP quando um usuário assiste ao final 48de um episódio de conteúdo. A janela principal exibe informações promocionais ou de resumo 49sobre o próximo episódio da série.</li> 50<li>Seu aplicativo pode fornecer uma maneira de os usuários colocarem conteúdo adicional em uma fila enquanto 51assistem a um vídeo. O vídeo continua a ser reproduzido no modo de PIP enquanto a tela principal 52exibe uma atividade de seleção de conteúdo.</li> 53</ul> 54 55<p>A janela do modo de PIP tem 240x135 dp e é mostrada na camada superior de um dos 56quatro cantos da tela, escolhido pelo sistema. O usuário pode exibir um 57menu de PIP que permite que coloque a janela do PIP em tela inteira ou feche-a 58ao pressionar o botão <b>Home</b> do controle remoto. Se outro 59vídeo começar a ser reproduzido na tela principal, a janela do PIP será fechada 60automaticamente. Os usuários também podem fechar a janela do PIP em Recents.</p> 61 62<img src="{@docRoot}preview/images/pip-active.png" /> 63<p class="img-caption"><strong>Figura 1.</strong> Um vídeo no modo de imagem em imagem 64visível no canto da tela enquanto o usuário navega por conteúdo 65na janela principal.</p> 66 67<p>O PIP utiliza as APIs de várias janelas disponíveis no Android N para 68fornecer a janela sobreposta de vídeo fixo. Para adicionar o modo de PIP ao seu aplicativo, você deve 69registrar as atividades que oferecem suporte a PIP, alternar a atividade para o modo de PIP conforme 70a necessidade e garantir que os elementos de IU sejam ocultados e que a reprodução do vídeo continue quando 71a 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 padrão, o sistema não oferece suporte ao modo de PIP automaticamente para seus aplicativos. 76Se quiser esse suporte para seu aplicativo, registre a atividade 77de vídeo no manifesto definindo 78<code>android:supportsPictureInPicture</code> e 79<code>android:resizeableActivity</code> como <code>true</code>. Além disso, especifique 80que a atividade processa alterações na configuração de layout de forma que a atividade 81não seja reiniciada quando ocorrem essas alterações durante as transições do modo de PIP.</p> 82 83<pre> 84<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 reprodução de 94vídeo com uma quantidade mínima de itens de IU oferecem a melhor experiência do usuário. Atividades que contêm 95pequenos elementos de IU podem não oferecer uma boa experiência do usuário 96no modo de PIP, pois ele não conseguirá enxergar os detalhes desses elementos 97na janela do PIP.</p> 98 99<h2 id="pip_button">Alternar a atividade para o modo de imagem em imagem</h2> 100 101Quando precisar colocar a atividade no modo de PIP, chame 102<code>Activity.enterPictureInPictureMode()</code>. O exemplo a seguir 103entra no modo de PIP quando o usuário seleciona um botão dedicado ao PIP na barra de controle de 104uma mídia:</p> 105 106<pre> 107@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>Adicionar um botão de PIP à barra de controle de mídia permite que o usuário entre no 117modo de PIP com facilidade ao controlar a reprodução de um vídeo.</p> 118 119<img src="{@docRoot}preview/images/pip-button.png" /> 120<p class="img-caption"><strong>Figura 1.</strong> Um botão do 121modo de imagem em imagem em uma barra de controle de mídia.</p> 122 123<p>O Android N inclui uma nova classe 124<code>PlaybackControlsRow.PictureInPictureAction</code> que define ações do PIP 125para 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 reprodução do 130vídeo. Remova elementos de IU antes que a atividade entre no modo de PIP 131e restaure esses elementos quando a atividade voltar ao modo de tela inteira. 132Substitua <code>Activity.onPictureInPictureModeChanged()</code> ou 133<code>Fragment.onPictureInPictureModeChanged()</code> e ative ou 134desative os elementos de interface conforme for necessário. Por exemplo:</p> 135 136<pre> 137@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 reprodução de vídeo no modo de 150imagem em imagem</h2> 151 152<p>Quando a atividade entra no modo de PIP, o sistema a considera 153pausada e chama o método <code>onPause()</code> da atividade. A reprodução 154de vídeos não deverá ser pausada se a atividade 155for pausada devido ao modo de PIP. Verifique o PIP no método 156<code>onPause()</code> da atividade e realize a reprodução da forma apropriada. Por 157exemplo:</p> 158 159<pre> 160@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>Quando a atividade sai do modo de PIP e volta à tela inteira, o 173sistema retoma a atividade e chama o método <code>onResume()</code>.</p> 174 175<h2 id="single_playback">Usar uma única atividade de reprodução para 176imagem em imagem</h2> 177 178<p>Ao navegar pelo conteúdo 179 da tela principal de seu aplicativo, um usuário pode selecionar um novo vídeo enquanto uma atividade de reprodução de vídeo estiver em modo de PIP. Reproduza o novo 180 vídeo na atividade de reprodução existente em modo de tela cheia em vez de 181lançar uma nova atividade que pode confundir o usuário.</p> 182 183<p>Para que uma única atividade seja usada para solicitações de reprodução de vídeo e 184com o modo de PIP ativado ou desativado, conforme necessário, configure o 185<code>android:launchMode</code> da atividade para <code>singleTask</code> em seu manifesto. 186</p> 187 188<pre> 189<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 197Activity.onNewIntent()} e processe o novo vídeo, interrompendo qualquer 198reprodução existente, caso necessário.</p> 199 200<h2 id="best">Práticas recomendadas</h2> 201 202<p>O PIP é destinado a atividades que reproduzem vídeos em tela inteira. Ao passar 203a atividade para o modo de PIP, evite mostrar qualquer coisa que não seja o conteúdo do vídeo. 204Rastreie quando a atividade entrar no modo de PIP e oculte os elementos de IU, conforme descrito 205em <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 208tela, você deve evitar exibir informações essenciais em qualquer área 209da janela principal que possa ser ocultada pela janela do PIP.</p> 210 211<p>Quando uma atividade está no modo de PIP, ela não recebe foco de entrada por padrão. Para 212receber eventos de entrada no modo de PIP, use 213<code>MediaSession.setMediaButtonReceiver()</code>.</p> 214