Praktik yang direkomendasikan

Aplikasi untuk perangkat foldable dan multilayar

Umumnya, aplikasi tidak boleh bergantung pada ID statis atau logika yang bergantung pada beberapa ID tampilan. Pada kebanyakan kasus, aplikasi harus mengubah ukuran dan berfungsi di tampilan yang berbeda dan sistem harus mengontrol tempat menemukan aplikasi. Misalnya, untuk membuat pengalaman baru dan unik untuk perangkat foldable serta meluncurkan aplikasi spesial di layar eksternal saat perangkat dilipat.

Dalam hal ini, SystemUI (atau komponen sistem lainnya) seharusnya mendeteksi lipat, menentukan apakah tindakan tersebut sesuai, lalu meluncurkan target aktivitas dan menentukan ID tampilan eksternal sebagai target peluncuran. Aplikasi tidak boleh mendeteksi tindakan ini atau melakukan tindakan apa pun sebagai respons, lalu melakukan peluncuran pada tampilan tertentu. Dengan kata lain, jangan berasumsi bahwa apa yang berfungsi di satu perangkat akan berfungsi di perangkat lain. Singkatnya, {i>device-specific<i} kode akan meningkatkan fragmentasi.

Batasi akses ke layar

Jika konfigurasi perangkat memerlukan pembatasan akses ke satu atau beberapa ditampilkan, sebaiknya gunakan flag Display#FLAG_PRIVATE untuk menetapkan tampilan tersebut sebagai pribadi. Tindakan ini akan membatasi semua kecuali pemilik toko untuk menambahkan konten ke tampilan. Setiap upaya untuk meluncurkan aktivitas atau tambahkan jendela oleh siapa saja kecuali pemilik menghasilkan SecurityException. Jika sistem memiliki layar, sistem dapat menambahkan jendela dan meluncurkan aktivitas.

Selain itu, entity yang ditempatkan di layar selalu dapat mengakses tampilan tersebut. Jika pemilik meluncurkan aktivitas pada layar, maka aktivitas dapat meluncurkan aktivitas pada tampilan ini. Akibatnya, pemilik bertanggung jawab untuk membatasi mengakses dan mengizinkan aplikasi tepercaya saja.

Selain itu, lebih banyak batasan ditambahkan ke tampilan virtual karena setiap aplikasi dapat membuatnya tanpa membuatnya terlihat oleh pengguna. Jika tampilan virtual tidak yang dimiliki oleh sistem, maka hanya aktivitas dengan allowEmbedded diizinkan dan pemanggil harus memiliki ACTIVITY_EMBEDDING izin akses.

Untuk informasi selengkapnya, lihat:

  • ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
  • ActivityDisplay#isUidPresent()
  • DisplayManagerService#isUidPresentOnDisplay()

Untuk mengontrol peluncuran aktivitas secara kondisional, gunakan LaunchParamsController, yang mencegat semua peluncuran aktivitas dan memungkinkan komponen sistem untuk memodifikasi parameter yang digunakan untuk peluncuran. Fitur ini tersedia di system_server.

Mengonfigurasi setelan jendela tampilan dan dekorasi sistem

Dekorasi sistem dapat dikonfigurasi per tampilan di DisplayWindowSettings. Perangkat dapat menyediakan konfigurasi default dalam /data/system/display_settings.xml.

Nilai ini menentukan apakah dekorasi sistem (peluncur, wallpaper, bilah navigasi, dan jendela dekorasi lainnya) dan IME muncul di tampilan. Untuk mengetahui detailnya, lihat DisplayWindowSettings#shouldShowSystemDecorsLocked() dan DisplayWindowSettings#shouldShowImeLocked().

Untuk mengidentifikasi tampilan, gunakan ID unik (setelan default ini menggunakan DisplayInfo#uniqueId) atau ID port fisik untuk hardware ditampilkan (lihat DisplayInfo#address).

Misalnya, contoh konfigurasi tampilan berikut mengaktifkan dekorasi sistem dan IME pada tampilan simulasi:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="0" />
<display
  name="overlay:1"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

Pada contoh di atas, uniqueId digunakan untuk identifikasi tampilan di atribut nama, yang untuk tampilan simulasi adalah overlay:1. Untuk layar bawaan, nilai contohnya mungkin "local:45354385242535243453". Opsi lainnya adalah menggunakan informasi port hardware dan menyetel identifier="1" agar sesuai dengan DisplayWindowSettings#IDENTIFIER_PORT, lalu update nama untuk menggunakan format "port:<port_id>":

<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="1" />
<display
  name="port:12345"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

Untuk mengetahui detailnya, lihat ID tampilan statis.

Untuk informasi selengkapnya, lihat: