Política de lanzamiento de actividad

El comportamiento de inicio de la actividad se define mediante los modos de inicio en los archivos AndroidManifest.xml de las aplicaciones, los indicadores de intención y las opciones de actividad proporcionadas por la persona que llama. Use ActivityOption#setLaunchDisplayId(int) para apuntar a una pantalla específica para el inicio de la actividad.

  • De forma predeterminada, la actividad se inicia en la misma pantalla que la persona que llama. Por ejemplo, una nueva instancia de una actividad iniciada desde el iniciador debe colocarse en la misma pantalla sin banderas u opciones adicionales. Asegúrese de usar el contexto correcto (Actividad versus Aplicación) para el lanzamiento.
  • Si el inicio se realiza desde una fuente no asociada con una pantalla específica (como desde un shell o el contexto de la aplicación), la actividad se coloca en la pantalla superior en la que el usuario interactuó por última vez con el dispositivo o desde la que se realizó la última actividad. lanzado.
  • La intención de iniciar una actividad se puede resolver en una instancia de actividad existente en el sistema. En tal caso, si no se proporcionaron indicadores adicionales, una actividad aparece en la misma pantalla donde se usó por última vez. Si la pantalla de destino se especifica con ActivityOptions#setTargetDisplayId() , la actividad se mueve a esa pantalla (si lo permiten la seguridad y otras restricciones).

Restricciones de seguridad

Para evitar que una aplicación malintencionada se apropie indebidamente de información confidencial del usuario al leerla desde la superficie de una pantalla virtual que ha creado, las aplicaciones pueden iniciar sus propias actividades solo en una pantalla virtual de su creación en Android 10. Sin embargo:

  • Los componentes del sistema con el permiso INTERNAL_SYSTEM_WINDOW pueden iniciarse en cualquier pantalla.
  • Las personas que llaman con el permiso ACTIVITY_EMBEDDING pueden iniciar actividades desde otras aplicaciones que tengan la marca ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • Los lanzamientos de actividades en pantallas privadas solo están permitidos para el propietario o las actividades presentes en esa pantalla.

Se aplican restricciones similares a la adición de ventanas a las pantallas.

Android 10 incluye el ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) para comprobar las restricciones de seguridad de la aplicación antes de intentar iniciarla en una pantalla. En Android 9 (y versiones anteriores), los resultados de lanzamiento restringidos arrojan SecurityException .

La mayoría de las restricciones de seguridad se aplican en el método ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() .