Önerilen Uygulamalar

Katlanabilir ve çok ekranlı cihazlar için uygulamalar

Genel olarak uygulamalar, bazı ekran kimliklerine bağlı olan statik tanımlayıcılara veya mantığa dayanmamalıdır. Çoğu durumda, uygulamalar yeniden boyutlandırılmalı ve farklı ekranlarda çalışmalı ve sistem, uygulamaların nerede bulunacağını 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) katlamayı algılamalı, bir eylem gerçekleştirmenin uygun olup olmadığını belirlemeli ve ardından hedef etkinliği başlatmalı ve başlatma hedefi olarak harici bir ekran kimliği belirtmelidir. Uygulamalar bu eylemi algılamamalı veya yanıt olarak herhangi bir eylem gerçekleştirmemeli ve ardından başlatmayı belirli bir ekranda gerçekleştirmemelidir. Başka bir deyişle, bir cihazda çalışanın diğer cihazlarda da çalışacağını varsaymayın. Kısacası, cihaza özel kod parçalanmayı artırır.

Ekranlara erişimi kısıtlama

Aygıt yapılandırması bir veya daha fazla ekrana erişimin kısıtlanmasını gerektiriyorsa, bu tür ekranları özel olarak atamak için Display#FLAG_PRIVATE bayrağının kullanılması önerilir. Bunu yapmak, sahip dışındaki herkesin ekrana içerik eklemesini kısıtlar. Sahibi dışında herhangi biri tarafından herhangi bir etkinlik başlatma veya pencere ekleme girişimi bir SecurityException ile sonuçlanır. Sistem ekranın sahibiyse, sistem pencereler ekleyebilir ve etkinlikleri başlatabilir.

Ayrıca, bir ekrana yerleştirilen varlıklar o ekrana her zaman erişebilir. Sahibi bir ekranda bir etkinlik başlatırsa, etkinlik bu ekranda başka etkinlikler başlatabilir. Sonuç olarak, erişimi kısıtlamaktan ve yalnızca güvenilir uygulamalara izin vermekten sahibi sorumludur.

Ayrıca, herhangi bir uygulama, kullanıcı tarafından görünür hale getirilmeden bir tane oluşturabileceğinden, sanal ekranlara daha fazla kısıtlama eklenir. Sanal ekranın sahibi sistem değilse, yalnızca allowEmbedded içeren etkinliklere izin verilir ve arayan kişinin ACTIVITY_EMBEDDING iznine sahip olması gerekir.

Daha fazla bilgi için, bkz:

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

Aktivite başlatmalarını koşullu olarak kontrol etmek için, tüm aktivite başlatmalarını engelleyen ve bir sistem bileşeninin başlatma için kullanılan parametreleri değiştirmesine izin veren LaunchParamsController kullanın. Bu, system_server mevcuttur.

Ekran pencereleme ayarlarını ve sistem dekorasyonlarını yapılandırma

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

Bu değer, sistem dekorasyonlarının (başlatıcı, duvar kağıdı, gezinme çubuğu ve diğer dekor pencereleri) ve IME'nin bir ekranda görünüp görünmeyeceğini belirler. Ayrıntılar için bkz. DisplayWindowSettings#shouldShowSystemDecorsLocked() ve DisplayWindowSettings#shouldShowImeLocked() .

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

Örneğin, aşağıdaki ekran yapılandırma örneği, simüle edilmiş bir ekranda sistem dekorasyonlarını 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, simüle edilmiş bir ekran için overlay:1 olan name özniteliğinde ekran tanımlaması için uniqueId kullanılır. 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" DisplayWindowSettings#IDENTIFIER_PORT 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ılar için bkz. Statik görüntü tanımlayıcıları .

Daha fazla bilgi için, bkz: