Android 8.0 (nível 26 da API) permite o lançamento de atividades no modo imagem em imagem (PIP). O PIP é um tipo especial de modo multi-janela usado principalmente para vídeo playback.It permite ao utilizador ver um vídeo numa pequena janela presa num canto do ecrã enquanto navega entre aplicações ou o conteúdo de navegação no ecrã principal.
PIP alavanca a APIs multi-janela disponível no Android 7.0 para fornecer a janela de sobreposição de vídeo. Para adicionar o PIP à sua aplicação, precisa de recolher as suas actividades que suportam o PIP, mudar a sua actividade para o modo PIP como necessário, e certificar-se de que os elementos UI estão escondidos e de que a reprodução de vídeo continua quando a actividade está no modo PIP.
a janela do PIP aparece na camada superior da tela, em um canto escolhido pelo sistema. Pode arrastar a janela do PIP para outro local., Quando você toca na janela aparecem dois controles especiais: uma comutação de tela cheia (no centro da janela) e um botão de fechar (um “X” no canto superior direito).
a sua aplicação controla quando a actividade actual entra no modo PIP. Aqui estão alguns exemplos:
- uma actividade pode entrar no modo PIP quando o utilizador tapar a casa ou recentsbutton para escolher outra aplicação. (É assim que o Google Maps continua a exibir direções, enquanto o usuário passa outra atividade ao mesmo tempo.)
- o seu aplicativo pode mover um vídeo para o modo PIP quando o usuário navega do vídeo para navegar por outro conteúdo.,
- o seu aplicativo pode mudar um vídeo para o modo PIP enquanto um usuário assiste o fim de um episódio de conteúdo. A tela principal exibe informações promocionais ou sumárias sobre o próximo episódio da série.
- o seu aplicativo pode fornecer uma maneira para os usuários fazer fila para conteúdo adicional enquanto eles assistem um vídeo. O vídeo continua a tocar no modo PIP enquanto o ecrã principal mostra uma actividade de selecção de conteúdo.
declarando Suporte imagem-em-imagem
por padrão, o sistema não suporta automaticamente PIP para aplicativos.,Se quiser suportar o PIP na sua aplicação, registe a sua videoactividade no seu manifesto, definindoandroid:supportsPictureInPicture
para true
. Além disso, especifique que a sua actividade lida com as alterações da configuração do layout, de modo que a sua actividadenão relançará quando as alterações do layout ocorrerem durante as transições do modo PIP.
mudando a sua actividade para imagem em imagem
para entrar no modo imagem em imagem, uma actividade tem de chamarenterPictureInPictureMode()
., Por exemplo, o followingcode muda uma actividade para o modo PIP quando o utilizador carrega num botão dedicado na UI da aplicação:
poderá querer incluir a lógica que muda uma actividade para o modo PIP em vez de ir para o campo. Por exemplo, o Google Maps muda para o modo PIP se o usuário carregar no home ou recentsbutton enquanto o aplicativo está navegando., Você pode pegar este caso substituindo onUserLeaveHint()
:
Tratamento de IU durante a imagem-em-imagem
Quando a atividade entra ou sai de imagem-em-modo de imagem o sistema de chamadas deActivity.onPictureInPictureModeChanged()
ouFragment.onPictureInPictureModeChanged()
.
deve anular estas chamadas para redesenhar os elementos UI da actividade. Tenha em mente que o modo inPIP sua atividade é mostrado em uma pequena janela. Os usuários não podem interagir com elementos UI quando o modo inPIP e os detalhes de pequenos elementos UI podem ser difíceis de ver. As actividades de reprodução de vídeo com UI mínimas proporcionam a melhor experiência do utilizador., A atividade deve apenas mostrar vídeo playbackcontrols. Remova outros elementos de UI antes de a sua actividade entrar no PIP e reponha-os quando a sua actividade voltar ao ecrã completo:
adicionando os controlos
a janela do PIP poderá mostrar os controlos quando o utilizador abrir o menu da janela (batendo na janela de um dispositivo móvel ou seleccionando o menu do remoto da TV.)
Se um aplicativo tem uma sessão activemedia, então jogue, pause, próximo e controles anteriores irão aparecer.,
Você também pode especificar ações personalizadas explicitamente através da construção dePictureInPictureParams
com PictureInPictureParams.Builder.setActions()
antes de entrar no modo PIP, e passar os parâmetros whenyou entrar no modo PIP, usando oenterPictureInPictureMode(android.app.PictureInPictureParams)
ousetPictureInPictureParams(android.app.PictureInPictureParams)
.Ser cuidadoso. Se você tentar adicionar mais do que getMaxNumPictureInPictureActions()
você só vai obter o número máximo.
continuar o videoplayback enquanto na imagem na imagem
quando a sua actividade muda para o PIP, o sistema coloca a actividade no estado de uso e chama o método
., A reprodução de vídeo não deve ser interrompida e deve continuar a ser activada se a actividade estiver em pausa no modo PIP.
No Android 7.0 e posterior, você deve fazer uma pausa e retomar a reprodução de vídeo quando o systemcalls sua atividade onStop()
eonStart()
. Ao fazer isto, pode evitar verificar se a sua aplicação está no modo PIP emonPause()
e explicar a reprodução contínua.,
Se você precisa fazer uma pausa na reprodução no seu onPause()
implementação, de seleção para o modo PIP chamando isInPictureInPictureMode()
e lidar com a reprodução de forma adequada, por exemplo:
Quando a sua atividade alterna de modo PIP de volta para o modo de tela cheia, thesystem retoma a sua atividade e chama oonResume()
método.
usando uma única actividade de reprodução para a imagem
na sua aplicação, um utilizador pode seleccionar um novo vídeo ao navegar pelo conteúdo no ecrã principal, enquanto uma actividade de reprodução de vídeo está no modo PIP., Reproduzir o newvideo na actividade de reprodução existente no modo de ecrã completo, em vez de lançar uma nova actividade que possa confundir o utilizador.
Para garantir uma única atividade é utilizada para a reprodução de vídeo pedidos andswitched para dentro ou para fora de modo PIP, conforme necessário, defina a atividade doandroid:launchMode
singleTask
em seu manifesto:
<activity android:name="VideoActivity" ... android:supportsPictureInPicture="true" android:launchMode="singleTask" ...
Em sua atividade, substituir onNewIntent()
e lidar com o novo vídeo, parando qualquer existente videoplayback, se necessário.
as melhores práticas
PIP podem ser desactivadas em dispositivos com memória RAM baixa., Antes de o seu aplicativo usar o PIP, verifique se está disponível, chamando hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
.o PIP destina-se a actividades que reproduzem vídeo em ecrã completo. Ao mudar a sua actividade para o modo PIP, evite mostrar qualquer coisa excepto o conteúdo de vídeo.Acompanhe quando a sua actividade entra no modo PIP e esconda elementos UI, como descrito em lidar com UI durante a imagem em imagem.dado que a janela do PIP é mostrada como uma janela flutuante no canto do ecrã, deve evitar mostrar informações críticas no ecrã principal em qualquer área que possa ser obscurecida pela janela do PIP.,
Quando uma atividade está no modo PIP, por padrão não recebe foco de entrada. Para receber eventos de entrada enquanto estiver no modo PIP, use. Para mais informações sobre o uso desetCallback()
seedisplaying Now Playing Card.
Quando o seu aplicativo está no modo PIP, a reprodução de vídeo na janela do PIP pode causar interferência de áudio com outro aplicativo, como um aplicativo de leitor de música ou voz searchapp. Para evitar isso, solicite o foco de áudio quando você começar a reproduzir o vídeo, e lidar com notificações de mudança de foco de áudio, como descrito na gestão AudioFocus., Se você receber notificação de perda de foco de áudio quando no modo PIP,pausa ou parar a reprodução de vídeo.
Quando a sua aplicação estiver prestes a entrar no PIP, repare que apenas a actividade de topo irá introduzir a imagem na imagem. Em algumas situações, como em dispositivos multi-janelas, é possível que a atividade abaixo seja mostrada e se torne visível novamente ao lado da atividade do PIP. Você deve lidar com este caso de acordo, incluindo a atividade abaixo obtendo um onResume()
ou um onPause()
callback. Também é possível que o utilizador possa interagir com a actividade., Por exemplo, se você tiver uma atividade de Lista de vídeo exibida e a atividade de reprodução de vídeo no modo PIP, o usuário pode selecionar um novo vídeo da lista e a atividade PIP deve atualizar de acordo.
código de amostra adicional
para baixar um aplicativo de exemplo escrito em Android, seePicture-in-Picture Sample.To descarregue um aplicativo de exemplo escrito em Kotlin, seeAndroid PictureInPicture Sample (Kotlin).