Политика запуска активности

Поведение запуска действия определяется режимами запуска в файлах AndroidManifest.xml приложений, флагами намерений и параметрами ActivityOptions, предоставленными вызывающей стороной. Используйте ActivityOption#setLaunchDisplayId(int) , чтобы указать конкретный дисплей для запуска активности.

  • По умолчанию действие запускается на том же дисплее, что и вызывающий абонент. Например, новый экземпляр активности, запущенной из панели запуска, должен размещаться на том же дисплее без дополнительных флагов и опций. Обязательно используйте правильный контекст (активность или приложение) для запуска.
  • Если запуск осуществляется из источника, не связанного с конкретным дисплеем (например, из оболочки или контекста приложения), то активность размещается на верхнем дисплее, на котором пользователь последний раз взаимодействовал с устройством или с которого было совершено последнее действие. запущен.
  • Намерение запустить действие можно отнести к существующему экземпляру действия в системе. В таком случае, если не были указаны дополнительные флажки, действие отображается на том же дисплее, где оно использовалось в последний раз. Если целевой дисплей указан с помощью ActivityOptions#setTargetDisplayId() , действие перемещается на этот дисплей (если это разрешено безопасностью и другими ограничениями).

Ограничения безопасности

Чтобы предотвратить незаконное присвоение вредоносным приложением конфиденциальной информации пользователя путем считывания ее с поверхности созданного им виртуального дисплея, приложения могут запускать свои собственные действия только на созданном ими виртуальном дисплее в Android 10. Однако:

  • Системные компоненты с разрешением INTERNAL_SYSTEM_WINDOW могут запускаться на любом дисплее.
  • Вызывающие абоненты с разрешением ACTIVITY_EMBEDDING могут запускать действия из других приложений, имеющих флаг ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • Запуск действий на частных дисплеях разрешен только для владельца или действий, присутствующих на этом дисплее.

Аналогичные ограничения применяются к добавлению окон на дисплеи.

Android 10 включает метод ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) для проверки ограничений безопасности для приложения перед попыткой запуска на дисплее. В Android 9 (и более ранних версиях) результаты ограниченного запуска вызывают SecurityException .

Большинство ограничений безопасности применяются в методе ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() .