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.