usar picture oreo modo imagen como activar android android-8.0-oreo android-picture-in-picture

android - picture - ¿Cómo salimos del modo imagen en imagen?



imagen en imagen youtube (3)

Tenemos enterPictureInPictureMode() para mover una actividad de su forma actual a una representación de imagen en imagen.

¿Cuál es el medio por el cual revertimos eso, volviendo la actividad a su estado normal, además de destruir la actividad? No hay ningún exitPictureInPictureMode() , leavePictureInPictureMode() o janeGetMeOffThisCrazyPictureInPictureModeThing() en Activity , y la documentación no parece cubrir una alternativa.

Estoy interesado en una solución para Android O, para el modo picture-in-picture en dispositivos móviles, aunque si eso también funciona para Android TV, ¡maravilloso!

ACTUALIZACIÓN 2017-04-08 : Si lo que desea es volver al modo normal cuando el usuario hace clic en el botón X para salir del modo de imagen en imagen, puede hacer algo como esto:

@Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { super.onPictureInPictureModeChanged(isInPictureInPictureMode); if (!isInPictureInPictureMode) { getApplication().startActivity(new Intent(this, getClass()) .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); } }

Los bits clave son para llamar a startActivity() para iniciar la actividad actual nuevamente con FLAG_ACTIVITY_REORDER_TO_FRONT . Con una actividad singleTask , debe invocar eso en algún contexto no relacionado con la Activity , como Singleton de la Application . Esto no parece desencadenar onStop() o onStart() , pero onNewIntent() (con cualquier Intent que pase a startActivity() ).


  1. Mueva la actividad a la parte posterior

    activity.moveTaskToBack(false /* nonRoot */);

  2. restaurar la actividad al frente

    Intent startIntent = new Intent(PipActivity.this, PipActivity.class); startIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); activity.startActivity(startIntent);


No creo que la actividad pueda decidir abandonar el modo Imagen en imagen.

Desde el documento de vista previa de la API de Android O :

La actividad que ingresa al modo PIP entra en estado de pausa, pero permanece en el inicio. Si el usuario toca la actividad PIP, el sistema muestra un menú para que el usuario interactúe; los eventos sin toque alcanzan la actividad mientras está en el estado PIP.

La actividad será notificada por onPictureInPictureModeChanged .


La documentación oficial dice que la ventana PIP aparece con un menú que le permite alternar a pantalla completa.

La ventana PIP tiene 240x135 dp y se muestra en la capa superior en una de las cuatro esquinas de la pantalla, elegida por el sistema. El usuario puede abrir un menú PIP que le permite alternar la ventana PIP a pantalla completa, o cerrar la ventana PIP, manteniendo presionado el botón Inicio en el control remoto. Si otro video comienza a reproducirse en la pantalla principal, la ventana PIP se cierra automáticamente.

Y puede anular el evento modificado PIP para manejar los elementos de la interfaz de usuario siempre que el usuario active el modo PIP.

enlace a onPictureInPictureModeChanged

@Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { if (isInPictureInPictureMode) { // Hide the controls in picture-in-picture mode. ... } else { // Restore the playback UI based on the playback status. ... } }