Bu görüntülemeye özgü alanlarda yapılan güncellemeler aşağıda sağlanmıştır:
Sistem süslemeleri
Android 10'a ikincil yapılandırma desteği eklendi duvar kağıdı, gezinme çubuğu ve arka plan rengi gibi belirli sistem süslemelerini ve başlatıcıyı kullanabilirsiniz. Varsayılan olarak, birincil ekran tüm sistem süslemelerini gösterir ve ikincil ekranlarda isteğe bağlı olarak etkinleştirilenler gösterilir. Giriş Yöntemi Düzenleyici desteği (IME), diğer sistem süslemelerinden ayrı olarak ayarlanabilir.
DisplayWindowSettings#setShouldShowSystemDecorsLocked()
hesabını kullan
belirli bir ekranda sistem süslemeleri için destek eklemek veya
/data/system/display_settings.xml
içinde varsayılan bir değerdir. Örneğin,
Görüntüleme penceresi ayarları adlı makaleyi inceleyin.
Uygulama
DisplayWindowSettings#setShouldShowSystemDecorsLocked()
ayrıca şuralarda da açığa çıktı:
Test için WindowManager#setShouldShowSystemDecors()
. Bu yöntemin tetiklenmesi
dekore etmek amacıyla kullanılan süsleme pencereleri,
Mevcut olanları kaldırmanızı öneririz. Çoğu zaman
durumunda, sistem süslemesi desteği değişikliği ancak
cihazı yeniden başlatmasını sağlayabilirsiniz.
WindowManager kod tabanındaki sistem süslemelerinin desteklenmesi için kontroller
genellikle DisplayContent#supportsSystemDecorations()
olur.
harici hizmetleri (örneğin, sistem arayüzü) kontrol ederek gezinme çubuğunun
gösterilmesi gerekir) WindowManager#shouldShowSystemDecors()
kullanın.
Bu ayarın neleri kontrol ettiğini anlamak için
bu yöntemleri kullanabilirsiniz.
Sistem kullanıcı arayüzü dekor pencereleri
Android 10'a sistem dekoru penceresi desteği eklendi
çünkü gezinme çubuğu çok önemli olduğundan yalnızca gezinme çubuğu
ve etkinlikler arasında gezinmek için
kullanın. Varsayılan olarak, gezinme çubuğunda
Geri ve Ana Sayfa uygun ücretleri. Bu, yalnızca hedef ekranın şunları desteklemesi durumunda dahil edilir:
(bkz. DisplayWindowSettings
) sistem süslemeleridir.
Durum çubuğu daha karmaşık bir sistem penceresidir çünkü Bildirim Gölgesi, Hızlı Ayarlar ve Kilit Ekranı da yer alır. Android'de 10, durum çubuğu ikincil ekranlarda desteklenmez. Bu nedenle, bildirimler, ayarlar ve tam bir tuş koruyucu yalnızca birincil görüntülü reklam.
Genel Bakış/Son aramalar sistem penceresi, ikincil cihazlarda desteklenmez ekranları. Android 10'da AOSP, yalnızca varsayılan ekrandır ve tüm ekranlardaki etkinlikleri içerir. Şuradan başlatıldığında: Son kullanılanlar, ikincil ekranda yer alan bir etkinlik ayarlanmaz. Bu yaklaşımda, teknik ekiplerin Uygulamalar diğer ekranlarda göründüğünde hemen güncelleniyor.
Uygulama
Cihaz üreticileri, ek sistem kullanıcı arayüzü özelliklerini uygulamak için ekranların eklenmesini/kaldırılmasını dinleyen tek bir Sistem Kullanıcı Arayüzü bileşeni Uygun içerik sunduğundan emin olun.
Çoklu Ekranı (MD) destekleyen bir Sistem Kullanıcı Arayüzü bileşeni, şu durumlardan biridir:
- Başlangıçta birden fazla ekran başlatma
- Ekran çalışma zamanında eklendi
- Çalışma zamanında ekran kaldırıldı
Sistem Kullanıcı Arayüzü, WindowManager'dan önce bir ekran eklendiğini algıladığında
bir yarış durumudur. Bu,
Abone olmak yerine bir ekran eklendiğinde WindowManager'dan Sistem kullanıcı arayüzüne
DisplayManager.DisplayListener
etkinlikleri. Referans olarak kullanabileceğiniz bir uygulama için
gezinme çubuğu desteği için CommandQueue.Callbacks#onDisplayReady
öğesine bakın
ve duvar kağıtları için WallpaperManagerInternal#onDisplayReady
.
Android 10 ayrıca şu güncellemeleri de sağlar:
- Tüm işlevleri
NavigationBarController
sınıfı kontrol eder gezinme çubuklarına özgüdür. - Özelleştirilmiş bir gezinme çubuğunu görüntülemek için
CarStatusBar
sayfasına bakın. TYPE_NAVIGATION_BAR
artık tek bir kişiyle sınırlı değil görüntülenebilir ve her ekran başına kullanılabilir.IWindowManager#hasNavigationBar()
, değeri içerecek şekilde güncellendi Yalnızca sistem kullanıcı arayüzü içindisplayId
parametresi.
Roketatar
Android 10'da her ekran, Android 10'da
sistem süslemeleri, aşağıdaki türlerde başlatıcı etkinlikleri için özel bir ana ekran yığınına sahiptir
Varsayılan olarak WindowConfiguration#ACTIVITY_TYPE_HOME
. Her bir ekran
başlatıcı etkinliğinin ayrı bir örneğini kullanır.
Şekil 1. Şunun için çoklu ekran başlatıcı örneği:
platform/development/samples/MultiDisplay
.
Mevcut başlatıcıların çoğu birden fazla örneği desteklemez ve optimize edilmez
büyük ekran boyutları için
kullanabilirsiniz. Ayrıca, farklı tür bir deneyim genellikle
ikincil/harici ekranlarda görebilirsiniz. İkincil okula özel bir etkinlik sağlamak için
Android 10'da SECONDARY_HOME
kategorisi kullanıma sunuluyor
filtrelerine dokunun. Bu etkinliğin örnekleri, sistemi destekleyen tüm ekranlarda kullanılır
her ekran için bir tane olacak şekilde süslemeler.
<activity> ... <intent-filter> <category android:name="android.intent.category.SECONDARY_HOME" /> ... </intent-filter> </activity>
Etkinlik, birden fazla işlemi engellemeyen bir başlatma moduna sahip olmalıdır.
ve farklı ekran boyutlarına uyum sağlaması beklenir. Başlatma modu
singleInstance
veya singleTask
olamaz.
Uygulama
Android 10'da, RootActivityContainer#startHomeOnDisplay()
ekrana bağlı olarak istenen bileşeni ve amacı otomatik olarak seçer
ana ekranın kullanıma sunulduğu yer. RootActivityContainer#resolveSecondaryHomeActivity()
.
Başlatıcı etkinlik bileşenini arama mantığını içerir.
seçili başlatıcıyı kullanabilir ve gerekiyorsa sistem varsayılanını kullanabilir (bkz.
ActivityTaskManagerService#getSecondaryHomeIntent()
) tıklayın.
Güvenlik kısıtlamaları
İkincil ekranlardaki etkinliklere uygulanan kısıtlamalara ek olarak, kötü amaçlı bir uygulamanın etkin bir sanal ekran oluşturma ihtimalini önlemek için Sistem süslemeleri ve kullanıcı hassas bilgilerini yüzeyden okurken başlatıcı yalnızca görünür ve sisteme ait sanal ekranlarda da Başlatıcı şurada içerik göstermiyor: sistem dışı sanal ekranlar için de geçerlidir.
Duvar kağıtları
Android 10 (ve sonraki sürümler) cihazlarda duvar kağıtları desteklenir ikincil ekranlarda:
Şekil 2. Dahili (yukarıda) ve harici cihazlarda animasyonlu duvar kağıdı görüntülenir (aşağıda)
Geliştiriciler, aşağıdaki bilgilerle duvar kağıdı özelliği için destek verdiklerini beyan edebilirler:
android:supportsMultipleDisplays="true"
WallpaperInfo
XML tanımı. Duvar kağıdı geliştiricileri
öğelerin, görüntülü reklam bağlamını kullanarak yüklenmesi
WallpaperService.Engine#getDisplayContext()
Çerçeve bir WallpaperService.Engine
örneği oluşturur
her bir motorun kendi yüzey ve görüntüleme bağlamı vardır. İlgili içeriği oluşturmak için kullanılan
her bir motorun tek tek, rastgele girildiğinde ve
farklı kare hızlarında (VSYNC'ye uygun şekilde) çalışır.
Ekranlar için ayrı ayrı duvar kağıtları seçme
Android 10, duvar kağıdı seçmek için doğrudan platform desteği sağlamaz
ayrı ayrı kontrol edebilirsiniz. Bunu başarmak için sabit bir ekran tanımlayıcı
her ekranda geçerli duvar kağıdı ayarlarını korumak için gereklidir.
Display#getDisplayId()
dinamik olduğundan
fiziksel ekran, yeniden başlatmadan sonra aynı kimliğe sahip olur.
Ancak Android 10'da DisplayInfo.mAddress
eklendi.
Fiziksel ekranlar için sabit tanımlayıcılar içeren ve
daha yakından inceleyeceğiz. Maalesef mantığı uygulamak için çok geç
Android 10 için Önerilen çözüm:
- Duvar kağıtlarını ayarlamak için
WallpaperManager
API'sini kullanın. WallpaperManager
,Context
öğesinden alındı ve herContext
nesnesi, karşılık gelen bu nesneye karşılık gelen ekran (Context#getDisplay()/getDisplayId()
). Dolayısıyla, birWallpaperManager
örneğindendisplayId
alın yapmanız gerekmez.- Çerçeve tarafında, bir
displayId
Context
nesnesini tanımlayın ve bunu statik bir tanımlayıcıyla (örneğin, fiziksel bir görüntü). Seçilen duvar kağıdını korumak için statik tanımlayıcıyı kullanın.
Bu geçici çözüm, duvar kağıdı seçicilere ilişkin mevcut uygulamaları kullanır. Eğer açıldığında ve doğru bağlamı kullandığında, çağrısı yapıldığında sistem, ekranı otomatik olarak tanıyabilir.
Geçerli ekran dışındaki bir ekran için duvar kağıdının ayarlanması gerekiyorsa
ardından hedef ekran için yeni bir Context
nesnesi oluşturun
(Context#createDisplayContext
) ve
WallpaperManager
örneği.
Güvenlik kısıtlamaları
Sistem, sahibi olmadığı sanal ekranlarda duvar kağıtları göstermez. Bunun nedeni, kötü amaçlı bir uygulamanın sanal bir güvenlik açığı oluşturabileceği etkin sistem süslemeleri desteğine sahip bir ekran ve kullanıcılara duyarlı bir yüzeyden alınan bilgiler (kişisel bir fotoğraf gibi).
Uygulama
Android 10'da IWallpaperConnection#attachEngine()
ve IWallpaperService#attach()
arayüzleri,
displayId
parametresini kullanarak görüntülü reklam başına bağlantı oluşturabilirsiniz.
WallpaperManagerService.DisplayConnector
, ekran başına bir değeri içerir
duvar kağıdı motoru ve bağlantısı. WindowManager'da duvar kağıdı denetleyicileri
yerine, yapımdaki her DisplayContent
nesne için oluşturulur
Tüm ekranlar için tek bir WallpaperController
.
Herkese açık WallpaperManager
yöntemi uygulamalarından bazıları (örneğin,
WallpaperManager#getDesiredMinimumWidth()
) işlem yapmak için güncellendi
ve ilgili ekranlar hakkında bilgi sağlar.
WallpaperInfo#supportsMultipleDisplays()
ve karşılık gelen
uygulama geliştiricilerin hangi
duvar kağıtları birden fazla ekrana hazır.
Varsayılan ekranda gösterilen duvar kağıdı hizmeti birden fazla ekran görürseniz sistem, ikincil ekranda varsayılan duvar kağıdını gösterir. görüntüler.
Şekil 3. İkincil ekranlar için duvar kağıdı yedek mantığı