Pregunta ¿Cómo salimos del modo imagen en imagen?


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 exitPictureInPictureMode(), leavePictureInPictureMode(), o janeGetMeOffThisCrazyPictureInPictureModeThing() método 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 startActivity() para comenzar la actividad actual nuevamente con FLAG_ACTIVITY_REORDER_TO_FRONT. Con un singleTask actividad, debe llamar a eso enActivity contexto, como el Application semifallo. Esto no parece desencadenar onStop() o onStart(), pero sí dispara onNewIntent() (con lo que sea Intent pasas a startActivity())


32
2018-04-02 23:07


origen


Respuestas:


  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);
    

7
2018-04-07 23:35



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

Desde el Android O API vista previa doc:

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().


2
2018-04-07 17:40



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, elegidas por el sistema. El usuario puede   trae un Menú PIP que les permite alternar la ventana PIP a   pantalla completa o cierre la ventana PIP, manteniendo presionado el botón Inicio   en el control remoto. Si otro video comienza a reproducirse en la pantalla principal, el   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.
        ...
    }
}

1
2018-04-02 23:50