Etkinlik başlatma politikası

Etkinlik başlatma davranışı, uygulamaların AndroidManifest.xml dosyalarındaki başlatma modları, amaç işaretleri ve arayan tarafından sağlanan ActivityOptions ile tanımlanır. Etkinlik başlatma için belirli bir ekranı hedeflemek üzere ActivityOption#setLaunchDisplayId(int) kullanın.

  • Etkinlik varsayılan olarak arayan kişiyle aynı ekranda başlatılır. Örneğin, başlatıcıdan başlatılan bir etkinliğin yeni örneği, ek işaret veya seçenek olmadan aynı ekrana yerleştirilmelidir. Başlatma için doğru bağlamı (Etkinlik ve Uygulama) kullandığınızdan emin olun.
  • Başlatma işlemi belirli bir ekranla ilişkilendirilmemiş bir kaynaktan (ör. kabuk veya uygulama bağlamı) gerçekleştirilirse etkinlik, kullanıcının cihazla en son etkileşimde bulunduğu veya son etkinliğin başlatıldığı üst ekrana yerleştirilir.
  • Bir etkinliği başlatma amacı, sistemdeki mevcut bir etkinlik örneğiyle çözümlenebilir. Bu durumda, ek işaret sağlanmadıysa etkinlik son kullanıldığı ekranda gösterilir. Hedef ekran ActivityOptions#setTargetDisplayId() ile belirtilmişse etkinlik, güvenlik ve diğer kısıtlamalar izin veriyorsa bu ekrana taşınır.

Güvenlik kısıtlamaları

Kötü amaçlı bir uygulamanın, oluşturduğu sanal ekranın yüzeyinden okuyarak kullanıcıya ait hassas bilgileri kötüye kullanmasını önlemek için uygulamalar, Android 10'da kendi etkinliklerini yalnızca oluşturdukları sanal ekranda başlatabilir. Ancak:

  • INTERNAL_SYSTEM_WINDOW iznine sahip sistem bileşenleri herhangi bir ekranda başlatılabilir.
  • ACTIVITY_EMBEDDING iznine sahip arayanlar, ActivityInfo.FLAG_ALLOW_EMBEDDED işaretine sahip diğer uygulamalardan etkinlik başlatabilir.
  • Etkinliklerin özel ekranlarda başlatılmasına yalnızca ekran sahibi veya ekranda bulunan etkinlikler için izin verilir.

Ekranlara pencere ekleme konusunda da benzer kısıtlamalar geçerlidir.

Android 10, uygulamayı ekranda başlatmaya çalışmadan önce güvenlik kısıtlamalarını kontrol etmek için ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) yöntemini içerir. Android 9 (ve önceki sürümlerde), kısıtlanmış başlatma sonuçları SecurityException istisnası oluşturur.

Güvenlikle ilgili kısıtlamaların çoğu ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() yönteminde uygulanır.