Perilaku peluncuran aktivitas ditentukan oleh mode peluncuran dalam
file AndroidManifest.xml
aplikasi, flag intent, dan ActivityOptions
yang disediakan oleh pemanggil. Gunakan ActivityOption#setLaunchDisplayId(int)
untuk
menargetkan layar tertentu untuk peluncuran aktivitas.
- Secara default, aktivitas diluncurkan di layar yang sama dengan pemanggil. Misalnya, instance baru aktivitas yang dimulai dari peluncur harus ditempatkan di layar yang sama tanpa flag atau opsi tambahan. Pastikan untuk menggunakan konteks yang benar (Aktivitas versus Aplikasi) untuk peluncuran.
- Jika peluncuran dilakukan dari sumber yang tidak terkait dengan tampilan tertentu (seperti dari shell atau konteks Aplikasi), aktivitas akan ditempatkan di layar atas tempat pengguna terakhir kali berinteraksi dengan perangkat atau tempat aktivitas terakhir diluncurkan.
- Intent untuk meluncurkan aktivitas dapat di-resolve ke instance aktivitas
yang ada di sistem. Dalam kasus tersebut, jika tidak ada tanda tambahan yang diberikan, aktivitas akan muncul di layar yang sama dengan tempat aktivitas terakhir kali digunakan. Jika tampilan target
ditentukan dengan
ActivityOptions#setTargetDisplayId()
, aktivitas akan dipindahkan ke tampilan tersebut (jika diizinkan oleh keamanan dan batasan lainnya).
Pembatasan keamanan
Untuk mencegah aplikasi berbahaya menyalahgunakan informasi sensitif pengguna dengan membacanya dari platform layar virtual yang telah dibuatnya, aplikasi dapat meluncurkan aktivitasnya sendiri hanya di layar virtual buatannya di Android 10. Namun:
- Komponen sistem dengan izin
INTERNAL_SYSTEM_WINDOW
dapat diluncurkan di layar apa pun. - Pemanggil dengan izin
ACTIVITY_EMBEDDING
dapat meluncurkan aktivitas dari aplikasi lain yang memiliki tandaActivityInfo.FLAG_ALLOW_EMBEDDED
. - Peluncuran aktivitas di layar pribadi hanya diizinkan untuk pemilik atau aktivitas yang ada di layar tersebut.
Pembatasan serupa berlaku untuk menambahkan jendela ke layar.
Android 10 menyertakan
metode ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent)
untuk memeriksa batasan keamanan
aplikasi sebelum mencoba diluncurkan di layar. Di Android 9
(dan yang lebih rendah), hasil peluncuran yang dibatasi akan menampilkan SecurityException
.
Sebagian besar batasan keamanan diterapkan dalam
metode ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.