Kebijakan peluncuran aktivitas

Perilaku peluncuran aktivitas ditentukan oleh mode peluncuran di file aplikasi AndroidManifest.xml , tanda maksud, dan ActivityOptions yang disediakan oleh pemanggil. Gunakan ActivityOption#setLaunchDisplayId(int) untuk menargetkan tampilan tertentu untuk peluncuran aktivitas.

  • Secara default, aktivitas diluncurkan pada tampilan yang sama dengan pemanggil. Misalnya, aktivitas baru yang dimulai dari peluncur harus ditempatkan pada tampilan yang sama tanpa tanda 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), maka aktivitas ditempatkan di tampilan atas tempat pengguna terakhir kali berinteraksi dengan perangkat atau tempat aktivitas terakhir dilakukan. diluncurkan.
  • Niat untuk meluncurkan suatu aktivitas dapat diselesaikan ke instance aktivitas yang ada di sistem. Dalam kasus seperti ini, jika tidak ada tanda tambahan yang diberikan, suatu aktivitas akan muncul di tampilan yang sama dengan tempat aktivitas tersebut terakhir kali digunakan. Jika tampilan target ditentukan dengan ActivityOptions#setTargetDisplayId() , maka aktivitas akan dipindahkan ke tampilan tersebut (jika diizinkan oleh keamanan dan batasan lainnya).

Pembatasan keamanan

Untuk mencegah aplikasi jahat menyalahgunakan informasi sensitif pengguna dengan membacanya dari permukaan tampilan virtual yang dibuatnya, aplikasi dapat meluncurkan aktivitasnya sendiri hanya pada tampilan virtual ciptaannya di Android 10. Namun:

  • Komponen sistem dengan izin INTERNAL_SYSTEM_WINDOW dapat diluncurkan pada tampilan apa pun.
  • Penelepon dengan izin ACTIVITY_EMBEDDING dapat meluncurkan aktivitas dari aplikasi lain yang memiliki tanda ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • Peluncuran aktivitas di layar pribadi hanya diperbolehkan bagi pemilik atau aktivitas yang ada di layar tersebut.

Pembatasan serupa berlaku untuk menambahkan jendela ke tampilan.

Android 10 menyertakan metode ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) untuk memeriksa batasan keamanan aplikasi sebelum mencoba meluncurkannya di layar. Di Android 9 (dan lebih rendah), hasil peluncuran terbatas menampilkan SecurityException .

Sebagian besar pembatasan keamanan diterapkan dalam metode ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() .