Katlanabilir ve çok ekranlı cihazlar için uygulamalar
Genel olarak uygulamalar, bazı görüntüleme kimliklerine dayalı statik tanımlayıcılara veya mantığa dayanmamalıdır. Çoğu durumda, uygulamaların boyutu değişip farklı ekranlarda çalışması gerekir. Uygulamaların nerede bulunacağını sistem kontrol eder. Ö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), katlama işlemini 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ın diğer cihazlarda da işe yarayacağını varsaymayın. Özetle, cihaza özgü kod parçalanmayı artırır.
Gösterilere erişimi kısıtlama
Cihaz yapılandırması bir veya daha fazla ekrana erişimin kısıtlanmasını gerektiriyorsa bu ekranları gizli olarak tanımlamak için Display#FLAG_PRIVATE
işaretini kullanmanız önerilir. Bu işlem, ekrana içerik ekleme yetkisini yalnızca ekranın sahibine bırakır. Etkinlik başlatma veya pencere ekleme girişimleri, etkinlik sahibi dışındaki kullanıcılar tarafından yapıldığında SecurityException
ile sonuçlanır.
Ekran sistem tarafından kontrol ediliyorsa sistem pencere ekleyebilir ve etkinlikleri başlatabilir.
Ayrıca, bir ekrana yerleştirilen öğeler her zaman bu ekrana erişebilir. Sahibi bir ekranda bir etkinlik başlatırsa etkinlik bu ekranda başka etkinlikler 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örünür hale getirmeden 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.
Görüntü pencereleme ayarlarını ve sistem süslemelerini yapılandırma
Sistem süslemeleri, DisplayWindowSettings
'de ekran başına yapılandırılabilir. Cihaz uygulaması, /data/system/display_settings.xml
'te 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 süsleme pencereleri) ve IME'nin ekranda gösterilip gösterilmeyeceğ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ğinde, simüle edilmiş bir ekranda sistem süslemeleri ve IME etkinleştirilmektedir:
<?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 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
değerine karşılık gelecek şekilde ayarlamak, 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 Statik görüntüleme tanımlayıcıları başlıklı makaleyi inceleyin.
Daha fazla bilgi için bkz.