Önerilen uygulamalar

Katlanabilir ve çok ekranlı cihazlara yönelik 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 uygulamayı başlatmak.

Bu durumda, SystemUI (veya başka bir sistem bileşeni) katlamayı algılamalı, bir eylem gerçekleştirmenin uygun olup olmadığına karar vermeli ve ardından hedef etkinliği başlatmalı ve başlatma hedefi olarak harici bir ekran kimliğini belirtmelidir. Uygulamalar bu eylemi algılamamalı veya yanıt olarak herhangi bir eylem gerçekleştirmemeli ve ardından belirli bir ekranda başlatma işlemini gerçekleştirmemelidir. Başka bir deyişle, bir cihazda çalışan şeyin 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 konfigürasyonu 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, sahibi dışındaki herkesin ekrana içerik eklemesini kısıtlar. Sahibi dışında herhangi birinin bir etkinlik başlatma veya pencere ekleme girişimi SecurityException ile sonuçlanır. Sistem ekranın sahibiyse, sistem pencereler ekleyebilir ve etkinlikleri başlatabilir.

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

Ayrıca sanal ekranlara daha fazla kısıtlama eklenir çünkü herhangi bir uygulama kullanıcıya görünür hale getirilmeden bir tane oluşturabilir. Sanal ekran sisteme ait değilse, yalnızca allowEmbedded içeren etkinliklere izin verilir ve arayanın ACTIVITY_EMBEDDING iznine sahip olması gerekir.

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

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

Etkinlik başlatmalarını koşullu olarak kontrol etmek için, tüm etkinlik 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 dekorasyonları DisplayWindowSettings ekran başına yapılandırılabilir. Bir cihaz uygulaması, /data/system/display_settings.xml dosyasında 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 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ılanda DisplayInfo#uniqueId kullanılı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 özelliğ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 ekran tanımlayıcıları .

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