Önerilen uygulamalar

Katlanabilir ve çok ekranlı cihazlar için uygulamalar

Genel olarak uygulamalar, statik tanımlayıcılara veya bazı ekran kimliklerine bağlı mantığa güvenmemelidir. Çoğu durumda, uygulamalar yeniden boyutlandırılıp farklı ekranlarda çalışmalıdır. Sistem, uygulamaların yerini 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 için bu özelliği kullanabilirsiniz.

Bu durumda SystemUI (veya başka bir sistem bileşeni) ekranı 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ı veya buna yanıt olarak herhangi bir işlem yapmamalı ve ardından belirli bir ekranda başlatma işlemini gerçekleştirmemelidir. Diğer bir deyişle, bir cihazda işe yarayan yöntemin diğer cihazlarda da işe yarayacağını varsaymayın. Özetle, cihaza özgü kod parçalanmayı artırır.

Ekranlara erişimi kısıtlama

Cihaz yapılandırması bir veya daha fazla ekrana erişimin kısıtlanmasını gerektiriyorsa bu tür ekranları özel olarak tanımlamak için Display#FLAG_PRIVATE işaretini kullanmanız önerilir. Bu işlem, sahibin dışındaki herkesin ekrana içerik eklemesini kısıtlar. Bir etkinlik başlatma veya sahibi dışında herhangi biri tarafından pencere ekleme girişimleri SecurityException ile sonuçlanır. Ekran sistem tarafından kontrol ediliyorsa sistem pencere ekleyebilir ve etkinlikleri başlatabilir.

Ayrıca, bir ekrana yerleştirilen varlıklar bu ekrana her zaman erişebilir. Etkinlik sahibi ekranda bir etkinlik başlatırsa etkinlik bu ekranda başka etkinlikleri de 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östermeden sanal ekran oluşturabileceğinden sanal ekranlara daha fazla kısıtlama eklenir. Sanal ekranın sahibi sistem değilse yalnızca allowEmbedded ile başlayan etkinliklere izin verilir ve arayanın ACTIVITY_EMBEDDING iznine sahip olması gerekir.

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 yöntem, 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'te kullanılabilir.

Ekran pencereleme 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 ürününde varsayılan bir yapılandırma sağlayabilir.

Bu değer, sistem süslemelerinin (başlatıcı, duvar kağıdı, gezinme çubuğu ve diğer dekorasyon 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 (bu varsayılan olarak DisplayInfo#uniqueId kullanır) veya donanım ekranları için fiziksel bağlantı noktası kimliği kullanın (DisplayInfo#address bölümüne bakın).

Örneğin, aşağıdaki ekran yapılandırması örneği, simüle edilmiş bir ekranda sistem süslemelerini ve IME'yi 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ımlama için uniqueId kullanılır. Bu değer, simüle edilmiş bir ekran için overlay:1 olur. Yerleşik ekran için örnek değer "local:45354385242535243453" olabilir. Diğer bir seçenek de donanım bağlantı noktası bilgilerini kullanarak identifier="1" değerini DisplayWindowSettings#IDENTIFIER_PORT değerine karşılık gelecek şekilde ayarlamak ve ardından 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ılı bilgi için Statik görüntüleme tanımlayıcıları başlıklı makaleyi inceleyin.

Daha fazla bilgi için bkz.