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 konteks shell atau Aplikasi), aktivitas akan ditempatkan pada layar atas tempat pengguna terakhir 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
ditetapkan dengan
ActivityOptions#setTargetDisplayId()
, aktivitas akan dipindahkan ke tampilan tersebut (jika diizinkan oleh keamanan dan pembatasan lainnya).
Pembatasan keamanan
Untuk mencegah aplikasi berbahaya menyalahgunakan informasi sensitif pengguna dengan membacanya dari platform tampilan virtual yang dibuatnya, aplikasi dapat meluncurkan aktivitasnya sendiri hanya pada tampilan virtual kreasinya 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 flagActivityInfo.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 bagi
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()
.