Önerilen uygulamalar

Katlanabilir ve çok ekranlı cihazlara yönelik uygulamalar

Genel olarak uygulamalar, statik tanımlayıcılara veya bazı görüntüleme kimliklerine bağlı mantığa güvenmemelidir. Çoğu durumda uygulamalar yeniden boyutlandırılmalı ve farklı ekranlarda çalışmalıdır. Uygulamaların nereye yerleştirileceğini sistem kontrol etmelidir. Örneğin, katlanabilir cihazlar için yeni ve benzersiz bir deneyim oluşturmak ve cihaz katlandığında harici ekranda özel bir uygulama başlatmak.

Bu durumda SystemUI (veya başka bir sistem bileşeni), katlama yerini algılamalı, bir işlem gerçekleştirmenin uygun olup olmadığını belirlemeli, ardından hedef etkinliği başlatmalı ve başlatma hedefi olarak harici bir ekran kimliği belirtmelidir. Uygulamalar bu işlemi algılamamalı, buna karşılık herhangi bir işlem yapmamalı ve ardından belirli bir ekranda başlatma işlemini gerçekleştirmelidir. Başka bir deyişle, bir cihazda çalışan bir özelliğin diğer cihazlarda da çalışacağını varsaymayın. Kısacası, cihaza özgü kod, parçalanmayı artırır.

Ekranlara erişimi kısıtlama

Cihaz yapılandırması, bir veya daha fazla ekranın erişiminin kısıtlanmasını gerektiriyorsa bu tür ekranları özel olarak belirlemek için Display#FLAG_PRIVATE işaretinin kullanılması önerilir. Bu işlem, sahibi hariç herkesin ekrana içerik eklemesini kısıtlar. Etkinlik başlatma veya pencere ekleme girişimleri yalnızca sahibi tarafından yapılabilir. Aksi takdirde SecurityException hatasıyla karşılaşılır. Ekran sisteme aitse sistem, pencere ekleyebilir ve etkinlik başlatabilir.

Ayrıca, bir ekrana yerleştirilen öğeler her zaman o ekrana erişebilir. Sahip bir ekranda etkinlik başlatırsa bu etkinlik, aynı ekranda başka etkinlikler başlatabilir. Bu nedenle, erişimi kısıtlamak ve yalnızca güvenilir uygulamalara izin vermek sahibin sorumluluğundadır.

Ayrıca, herhangi bir uygulama kullanıcıya görünür kılmadan sanal ekran oluşturabildiğinden sanal ekranlara daha fazla kısıtlama eklenir. Sanal ekran sisteme ait değilse yalnızca allowEmbedded ile ilgili etkinliklere izin verilir ve arayanın ACTIVITY_EMBEDDING izni olmalıdır.

Daha fazla bilgi için bkz.

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

Etkinlik başlatmalarını koşullu olarak kontrol etmek için LaunchParamsController kullanın. Bu, tüm etkinlik başlatmalarını durdurur ve bir sistem bileşeninin başlatma için kullanılan parametreleri değiştirmesine olanak tanır. Bu özellik system_server'da kullanılabilir.

Görüntü pencere ayarlarını ve sistem süslemelerini yapılandırma

Sistem süslemeleri, DisplayWindowSettings içinde ekran başına yapılandırılabilir. Bir cihaz uygulaması, /data/system/display_settings.xml içinde varsayılan yapılandırma sağlayabilir.

Bu değer, sistem süslemelerinin (başlatıcı, duvar kağıdı, gezinme çubuğu ve diğer süsleme pencereleri) ve IME'nin ekranda görünüp görünmeyeceğini belirler. Ayrıntılı bilgi için DisplayWindowSettings#shouldShowSystemDecorsLocked() ve DisplayWindowSettings#shouldShowImeLocked() başlıklı makaleleri inceleyin.

Ekranı tanımlamak için benzersiz bir kimlik (varsayılan olarak DisplayInfo#uniqueId kullanılır) veya donanım ekranları için fiziksel bağlantı noktası kimliği kullanın (bkz. DisplayInfo#address).

Örneğin, aşağıdaki ekran yapılandırması örneği, sistem süslemelerini ve IME'yi simüle edilmiş bir ekranda etkinleştirir:

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

Yukarıdaki örnekte, ad özelliğinde ekran tanımlaması için uniqueId kullanılıyor. Simüle edilmiş bir ekran için bu overlay:1 olur. Yerleşik bir ekran için örnek değer "local:45354385242535243453" olabilir. Diğer bir seçenek de donanım bağlantı noktası bilgilerini kullanmak ve identifier="1" değerini DisplayWindowSettings#IDENTIFIER_PORT ile eşleşecek şekilde ayarlayıp adı "port:<port_id>" biçimini kullanacak şekilde güncellemektir:

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

Ayrıntılar için Statik ekran tanımlayıcıları başlıklı makaleyi inceleyin.

Daha fazla bilgi için bkz.