Bu görüntüleme alanlarında yapılan güncellemeler bu sayfada sağlanır.
Sistem süslemeleri
Android 10, ikincil ekranların duvar kağıdı, gezinme çubuğu ve başlatıcı gibi belirli sistem süslemelerini gösterecek şekilde yapılandırılması için destek ekler. Varsayılan olarak, birincil ekranda tüm sistem süslemeleri gösterilir ve ikincil ekranlarda isteğe bağlı olarak etkinleştirilenler gösterilir. Giriş yöntemi düzenleyicisi (IME) desteğini diğer sistem süslemelerinden ayrı olarak ayarlayabilirsiniz.
Belirli bir ekranda sistem süslemeleri için destek eklemek veya DisplayWindowSettings#setShouldShowSystemDecorsLocked
içinde varsayılan bir değer sağlamak için /data/system/display_settings.xml kullanın. Örnekler için Görüntü penceresi ayarları başlıklı makaleye bakın.
Uygulama
DisplayWindowSettings#setShouldShowSystemDecorsLocked, test için WindowManager#setShouldShowSystemDecors içinde de kullanıma sunulur. Bu yöntemi sistem dekorlarını etkinleştirme amacıyla tetiklemek, daha önce eksik olan dekor pencerelerini eklemez veya daha önce mevcut olanları kaldırmaz. Çoğu durumda, sistem süslemeleri desteğindeki değişiklik yalnızca cihaz yeniden başlatıldıktan sonra tam olarak geçerli olur.
WindowManager kod tabanında sistem süslemelerinin desteklenip desteklenmediğiyle ilgili kontroller genellikle DisplayContent#supportsSystemDecorations üzerinden yapılırken harici hizmetlerle (ör. gezinme çubuğunun gösterilip gösterilmeyeceğini kontrol etmek için kullanılan Sistem Arayüzü) ilgili kontrollerde WindowManager#shouldShowSystemDecors kullanılır.
Bu ayarla nelerin kontrol edildiğini anlamak için bu yöntemlerin çağrı noktalarını inceleyin.
Sistem Arayüzü dekor pencereleri
Android 10, yalnızca gezinme çubuğu için sistem dekor penceresi desteği ekler. Bunun nedeni, gezinme çubuğunun etkinlikler ve uygulamalar arasında gezinmek için gerekli olmasıdır. Gezinme çubuğu varsayılan olarak Geri ve Ana Sayfa seçeneklerini gösterir. Gezinme çubuğu yalnızca hedef ekran sistem dekorasyonlarını destekliyorsa eklenir (bkz. DisplayWindowSettings).
Durum çubuğu, Bildirim Gölgesi, Hızlı Ayarlar ve Kilit Ekranı'nı da içerdiğinden daha karmaşık bir sistem penceresidir. Android 10'da durum çubuğu ikincil ekranlarda desteklenmez. Bu nedenle bildirimler, ayarlar ve tam tuş kilidi yalnızca birincil ekranda kullanılabilir.
Genel Bakışlar veya Son Kullanılanlar sistem penceresi ikincil ekranlarda desteklenmez. Android 10'da AOSP yalnızca varsayılan ekranda Son Arananlar'ı gösterir ve tüm ekranlardaki etkinlikleri içerir. Son Kullanılanlar'dan başlatıldığında, ikincil ekranda bulunan bir etkinlik varsayılan olarak bu ekranda ön plana getirilir. Bu yaklaşımın, uygulamalar diğer ekranlarda göründüğünde hemen güncellenmemesi gibi bilinen bazı sorunları vardır.
Uygulama
Cihaz üreticileri, ek Sistem Arayüzü özelliklerini uygulamak için ekranların eklenmesini veya kaldırılmasını dinleyen ve uygun içeriği sunan tek bir Sistem Arayüzü bileşeni kullanmalıdır.
Çoklu ekranı (MD) destekleyen bir Sistem Kullanıcı Arayüzü bileşeni aşağıdaki durumları ele almalıdır:
- Başlangıçta birden fazla ekranı başlatma
- Çalışma zamanında eklenen ekran
- Çalışma zamanında kaldırılan ekran
Sistem Arayüzü, WindowManager'dan önce bir ekranın eklendiğini algıladığında yarışma durumu oluşturur. DisplayManager.DisplayListener etkinliklerine abone olmak yerine bir ekran eklendiğinde WindowManager'dan Sistem Arayüzü'ne özel bir geri çağırma işlevi uygulayarak bu durumu önleyebilirsiniz. Referans uygulama için CommandQueue.Callbacks#onDisplayAddSystemDecorations (gezinme çubuğu desteği) ve WallpaperManagerInternal#onDisplayAddSystemDecorations (duvar kağıtları) bölümlerine bakın.
Ayrıca Android 10 aşağıdaki güncellemeleri sunar:
NavigationBarControllersınıfı, gezinme çubuklarına özgü tüm işlevleri kontrol eder.- Özelleştirilmiş bir gezinme çubuğunu görüntülemek için
CarStatusBarbölümüne bakın. TYPE_NAVIGATION_BARartık tek bir örnekle sınırlı değildir ve her ekranda kullanılabilir.IWindowManager#hasNavigationBar, yalnızca Sistem Arayüzü içindisplayIdparametresini içerecek şekilde güncellendi.
Başlatıcı
Android 10'da, sistem süslemelerini destekleyecek şekilde yapılandırılan her ekranda, varsayılan olarak WindowConfiguration#ACTIVITY_TYPE_HOME türünde başlatıcı etkinlikleri için özel bir ana ekran yığını bulunur. Her ekranda başlatıcı etkinliğinin ayrı bir örneği kullanılır:


Şekil 1. Platform/development/samples/MultiDisplay için çoklu ekran başlatıcı örneği.
Mevcut başlatıcıların çoğu birden fazla örneği desteklemez ve büyük ekran boyutları için optimize edilmemiştir. Ayrıca, ikincil/harici ekranlarda genellikle farklı bir deneyim beklenir. Android 10, ikincil ekranlar için özel bir etkinlik sağlamak amacıyla amaç filtrelerinde SECONDARY_HOME kategorisini kullanıma sundu. Bu etkinliğin örnekleri, sistem dekorasyonlarını destekleyen tüm ekranlarda ekran başına bir tane olacak şekilde kullanılır.
<activity>
...
<intent-filter>
<category android:name="android.intent.category.SECONDARY_HOME" />
...
</intent-filter>
</activity>Etkinlik, birden fazla örneği engelleyemeyen bir başlatma moduna sahip olmalı ve farklı ekran boyutlarına uyum sağlaması beklenmelidir. Başlangıç modu singleInstance veya singleTask olamaz.
Uygulama
Android 10'da, ana ekranın başlatıldığı ekrana bağlı olarak istenen bileşen ve amaç RootActivityContainer#startHomeOnDisplay
otomatik olarak seçilir. RootActivityContainer#resolveSecondaryHomeActivity
Şu anda seçili başlatıcıya bağlı olarak başlatıcı etkinliği bileşenini arama mantığını içerir ve gerekirse sistem varsayılanını kullanabilir (bkz.
ActivityTaskManagerService#getSecondaryHomeIntent).
Güvenlik kısıtlamaları
İkincil ekranlardaki etkinlikler için geçerli olan kısıtlamalara ek olarak, kötü amaçlı bir uygulamanın Sistem süslemeleri etkin şekilde sanal ekran oluşturup yüzeyden kullanıcıya ait hassas bilgileri okumasını önlemek için başlatıcı yalnızca sisteme ait sanal ekranlarda görünür. Başlatıcı, sistem dışı sanal ekranlarda içerik göstermez.
Duvar kağıtları
Android 10 ve sonraki sürümlerde duvar kağıtları ikincil ekranlarda desteklenir:


Şekil 2. İç (üstte) ve dış ekranlarda (altta) animasyonlu duvar kağıdı.
Geliştiriciler, android:supportsMultipleDisplays="true" XML tanımında WallpaperInfo sağlayarak duvar kağıdı özelliği desteğini beyan edebilir. Duvar kağıdı geliştiricilerin de WallpaperService.Engine#getDisplayContext içindeki ekran bağlamını kullanarak öğeleri yüklemesi beklenir.
Çerçeve, her ekran için bir WallpaperService.Engineörnek
oluşturur. Bu nedenle, her motorun kendi yüzeyi ve ekran bağlamı vardır. Geliştiricinin, her motorun VSync'e uygun şekilde farklı kare hızlarında bağımsız olarak çizim yapabildiğinden emin olması gerekir.
Tek tek ekranlar için duvar kağıdı seçme
Android 10, tek tek ekranlar için duvar kağıdı seçme konusunda doğrudan platform desteği sağlamaz. Bunu yapmak için, duvar kağıdı ayarlarının ekran başına kalıcı olması amacıyla sabit bir ekran tanımlayıcısı gerekir.
Display#getDisplayId dinamik olduğundan, fiziksel bir ekranın yeniden başlatıldıktan sonra aynı kimliğe sahip olacağı garanti edilmez.
Ancak Android 10'da DisplayInfo.mAddress eklendi. Bu, fiziksel ekranlar için sabit tanımlayıcılar içerir ve gelecekte tam bir uygulama için kullanılabilir. Maalesef Android 10 için bu mantığı uygulamak artık mümkün değil. Önerilen çözüm:
- Duvar kağıtlarını ayarlamak için
WallpaperManagersınıfını kullanın.WallpaperManager, birContextnesnesinden elde edilir ve herContextnesnesi, karşılık gelen ekranla (Context#getDisplay/getDisplayId) ilgili bilgilere sahiptir. Bu nedenle, yeni yöntemler eklemeden birWallpaperManagerörneğindendisplayIdelde edebilirsiniz. - Çerçeve tarafında,
displayIdnesnesinden elde edilenContextdeğerini kullanın ve bunu statik bir tanımlayıcıyla (ör. fiziksel bir ekranın bağlantı noktası) eşleyin. Seçilen duvar kağıdını kalıcı hale getirmek için statik tanımlayıcıyı kullanın.
Bu geçici çözüm, duvar kağıdı seçiciler için mevcut uygulamaları kullanır. Belirli bir ekranda açılmışsa ve doğru bağlamı kullanıyorsa duvar kağıdı ayarlama çağrısı yapıldığında sistem ekranı otomatik olarak tanımlayabilir.
Mevcut ekran dışında bir ekran için duvar kağıdı ayarlamanız gerekirse hedef ekran için yeni bir Context nesnesi oluşturun (Context#createDisplayContext) ve bu ekrandan WallpaperManager örneğini alın.
Güvenlik kısıtlamaları
Sistem, kendisine ait olmayan sanal ekranlarda duvar kağıtlarını göstermez. Bunun nedeni, kötü amaçlı bir uygulamanın sistem süslemeleri desteği etkinleştirilmiş sanal bir ekran oluşturup yüzeyden kullanıcıya ait hassas bilgileri (ör. kişisel bir fotoğraf) okuyabilmesiyle ilgili güvenlik endişesidir.
Uygulama
Android 10'da IWallpaperConnection#attachEngine ve IWallpaperService#attach arayüzleri, ekran başına bağlantılar oluşturmak için displayId parametresini kabul eder.
WallpaperManagerService.DisplayConnector, ekran başına bir duvar kağıdı motorunu ve bağlantısını kapsar. WindowManager'da, tüm ekranlar için tek bir WallpaperController yerine, oluşturma sırasında her DisplayContent nesnesi için duvar kağıdı denetleyicileri oluşturulur.
Herkese açık WallpaperManager yöntemi uygulamalarından bazıları (ör. WallpaperManager#getDesiredMinimumWidth), ilgili gösterimler için bilgi hesaplayıp sağlamak üzere güncellendi.
WallpaperInfo#supportsMultipleDisplays ve ilgili bir kaynak özelliği eklendi. Böylece uygulama geliştiriciler, hangi duvar kağıtlarının birden fazla ekrana uygun olduğunu bildirebilecek.
Varsayılan ekranda gösterilen duvar kağıdı hizmeti birden fazla ekranı desteklemiyorsa sistem, ikincil ekranlarda varsayılan duvar kağıdını gösterir:

Şekil 3. İkincil ekranlar için duvar kağıdı yedek mantığı.
Animasyonlu duvar kağıdı desteğini etkinleştirme
Android 10 ve sonraki sürümlerde (API 29), geliştiriciler duvar kağıtlarının çeşitli ekranlarda kullanılıp kullanılamayacağını belirtmek için android:supportsMultipleDisplays özelliğini kullanabilir. Masaüstü pencereli görüntüleme ortamlarında çoklu görev yoğun olduğundan, harici ekranlarda canlı duvar kağıtlarının oluşturulması GPU ve bellek yükünü önemli ölçüde etkileyebilir.
Sistem kaynaklarını korumak için sistem, bağlı ekranlarda canlı duvar kağıtlarını varsayılan olarak oluşturmaz. Animasyonlu duvar kağıdı, sistem yapılandırması veya uygulamanın manifesti tarafından kısıtlandığında sistem, yedek olarak statik bir duvar kağıdı oluşturur.
OEM'ler, üst düzey donanımlar için animasyonlu duvar kağıdı desteğini etkinleştirerek veya markalı bir görünüm için statik yedek görüntüyü özelleştirerek bu deneyimi ayarlayabilir.
Donanımınız birden fazla animasyonlu duvar kağıdı örneği oluşturabiliyorsa aşağıdaki yapılandırmayı geçersiz kılın:
| Kaynak Yolu | frameworks/base/core/res/res/values/config.xml |
|---|---|
| Yapılandırma Adı | config_isLiveWallpaperSupportedInDesktopExperience |
Yedek duvar kağıdını özelleştirme
Canlı duvar kağıtları devre dışı bırakılmışsa veya sağlayıcı tarafından desteklenmiyorsa sistem varsayılan bir bileşen kullanır. Bunu kendi statik duvar kağıdı sağlayıcınıza yönlendirebilirsiniz:
| Kaynak Yolu | frameworks/base/core/res/res/values/config.xml |
|---|---|
| Yapılandırma Adı | fallback_wallpaper_component |
Duvar kağıdı desteğini uygulama
Bu değişiklikleri uygulamak için cihaza özel klasörünüzde derleme zamanı kaynak yer paylaşımı kullanın. Bu klasör genellikle device/<vendor>/<product>/overlay/frameworks/base/core/res/res/values/ olur.