Ö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ıdır 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

Cihaz yapılandırma, bir veya daha fazla ekranlara girişte kısıtlamalar gerektiriyorsa, öneri kullanmaktır Display#FLAG_PRIVATE özel olarak bu tür görüntüler belirtmek için bayrak. Bunu yapmak, sahip dışındaki herkesin ekrana içerik eklemesini kısıtlar. Herhangi bir girişim bir etkinlik başlatmak için veya herkes ama içinde sahibi sonuçlarına göre bir pencere eklemek için SecurityException . 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, sahibi erişimi kısıtlamak ve yalnızca güvenilir uygulamaları sağlayan 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 sistemi tarafından sahip olunan değilse, o zaman sadece aktiviteleri allowEmbedded izin verilir ve arayan olmalıdır ACTIVITY_EMBEDDING izni.

Daha fazla bilgi için bakınız:

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

Şartlı için etkinlik lansmanları, kullanım kontrol LaunchParamsController tüm etkinlik başlattı karşılar ve lansmanı için kullanılan parametreleri değiştirmek için bir sistem bileşenini verir. Bu mevcuttur system_server .

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

Sistem dekorasyonu sergilenen başına yapılandırılabilir DisplayWindowSettings . Bir cihaz uygulaması varsayılan bir yapılandırma sağlayabilir /data/system/display_settings.xml .

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, kullanımı tanımlamak için benzersiz bir kimlik (bu varsayılan kullanımları ya DisplayInfo#uniqueId ) veya donanım ekranlar için fiziksel bir bağlantı noktası kimliği (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, uniqueId bir simüle edilmiş görüntü için adı özelliğinde ekran tanımlanması için kullanılan overlay:1 . Yerleşik bir ekran, örnek bir değer olabilir için "local:45354385242535243453" . Başka bir seçenek kullanımı donanım bağlantı noktası bilgileri ve set etmektir identifier="1" karşılık gelecek şekilde DisplayWindowSettings#IDENTIFIER_PORT ve sonra kullanmak üzere adı güncellemek "port:<port_id>" biçimi:

<?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 ekran tanımlayıcıları .

Daha fazla bilgi için bakınız: