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.
- Görüntüleme aralığı ayarları
- Statik görüntülü reklam tanımlayıcıları
- Sistem süslemelerini destekleme