Android 12 platformunda, uygulamanızı etkileyebilecek davranış değişiklikleri vardır. Aşağıdaki davranış değişiklikleri, targetSdkVersion
'den bağımsız olarak Android 12'de çalıştırılan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeniz ve geçerli olduğu durumlarda bunları düzgün bir şekilde desteklemek için gerektiği gibi değiştirmeniz gerekir.
Yalnızca Android 12'yi hedefleyen uygulamaları etkileyen davranış değişiklikleri listesini de inceleyin.
Kullanıcı deneyimi
Kaydırma sonu efektini uzatma
Android 12 ve sonraki sürümlerin yüklü olduğu cihazlarda aşırı kaydırma etkinliklerinin görsel davranışı değişir.
Android 11 ve önceki sürümlerde, fazla kaydırma etkinliği görsel öğelerin parlamasına neden olur. Android 12 ve sonraki sürümlerde ise görsel öğeler bir sürükleme etkinliğinde uzar ve geri sıçrar, bir fırlatma etkinliğinde ise uzar ve geri sıçrar.
Daha fazla bilgi için kaydırma hareketlerini animasyonlu hale getirme kılavuzunu inceleyin.
Uygulama açılış ekranları
Daha önce Android 11 veya önceki bir sürümde özel bir açılış ekranı uyguladıysanız Android 12'den itibaren doğru şekilde görüntülenmesi için uygulamanızı SplashScreen
API'ye taşımanız gerekir. Uygulamanızı taşımamanız, uygulama lansman deneyiminin bozulmasına veya istenmeyen bir deneyime yol açar.
Talimatlar için Mevcut başlangıç ekranı uygulamanızı Android 12'ye taşıma başlıklı makaleye bakın.
Ayrıca Android 12'den itibaren sistem, tüm uygulamalar için baştan başlatma ve hazırda başlatma durumlarında her zaman yeni Android sistem varsayılan açılış ekranını uygular.
Varsayılan olarak bu sistem varsayılan açılış ekranı, uygulamanızın başlatıcı simgesi öğesi ve temanızın windowBackground
(tek renkliyse) kullanılarak oluşturulur.
Daha fazla bilgi için başlangıç ekranları geliştirici kılavuzuna bakın.
Web intent çözümü
Android 12'den (API düzeyi 31) itibaren, genel bir web intent'i yalnızca uygulamanız söz konusu web intent'inde yer alan belirli bir alan için onaylanmışsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan için onaylanmamışsa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına yönlendirilir.
Uygulamalar aşağıdakilerden birini yaparak bu onayı alabilir:
Android uygulama bağlantılarını kullanarak alanı doğrulayın.
Android 12 veya sonraki sürümleri hedefleyen uygulamalarda sistem, uygulamanızın Android uygulama bağlantılarını otomatik olarak doğrulama şeklini değiştirir. Uygulamanızın intent filtrelerinde
BROWSABLE
kategorisini eklediğinizden vehttps
şemasını desteklediğinizden emin olun.Android 12 veya sonraki sürümlerde, bu güncellenmiş mantığın uygulamanızı nasıl etkilediğini test etmek için uygulamanızın Android uygulama bağlantılarını manuel olarak doğrulayabilirsiniz.
Sistem ayarlarında kullanıcıdan uygulamanızı alanla ilişkilendirmesini isteyin.
Uygulamanız web intent'lerini çağırıyorsa kullanıcıdan işlemi onaylamasını isteyen bir istem veya iletişim kutusu ekleyebilirsiniz.
Hareketle gezinme için tam ekran modunda iyileştirmeler
Android 12, kullanıcıların tam ekran modundayken hareketle gezinme komutlarını gerçekleştirmelerini kolaylaştırmak için mevcut davranışı birleştirir. Ayrıca Android 12, yapışkan tam ekran modu için geriye dönük uyumluluk davranışı sağlar.
Display#getRealSize ve getRealMetrics: Desteği sonlandırma ve kısıtlamalar
Android cihazlar; büyük ekranlar, tabletler ve katlanabilir cihazlar gibi birçok farklı form faktöründe mevcuttur. Uygulamanızın, içeriği her cihaza uygun şekilde oluşturması için ekran veya görüntü boyutunu belirlemesi gerekir. Android, zaman içinde bu bilgileri almak için farklı API'ler sağladı. Android 11'de WindowMetrics
API'sini kullanıma sunduk ve aşağıdaki yöntemlerin desteğini sonlandırdık:
Android 12'de WindowMetrics
kullanmaya devam etmenizi öneriyor ve aşağıdaki yöntemleri kullanımdan kaldırıyoruz:
Android 12, uygulamanın sınırlarını almak için Görüntülü Reklam Ağı API'lerini kullanan uygulamaların davranışını azaltmak amacıyla, tamamen yeniden boyutlandırılamayan uygulamalar için API'ler tarafından döndürülen değerleri kısıtlar. Bu durum, bu bilgileri MediaProjection
ile kullanan uygulamaları etkileyebilir.
Uygulamalar, pencerelerinin sınırlarını sorgulamak için WindowMetrics
API'lerini, mevcut yoğunluğu sorgulamak için ise Configuration.densityDpi
API'lerini kullanmalıdır.
Android'in eski sürümleriyle daha geniş uyumluluk için Android 4.0 (API düzeyi 14) ve sonraki sürümleri destekleyen bir WindowMetrics
sınıfı içeren Jetpack WindowManager
kitaplığını kullanabilirsiniz.
WindowMetrics'in nasıl kullanılacağına dair örnekler
Öncelikle, uygulamanızın etkinliklerinin tamamen yeniden boyutlandırılabilir olduğundan emin olun.
Etkinlikler, kullanıcı arayüzüyle ilgili tüm çalışmalar için (özellikle WindowManager.getCurrentWindowMetrics()
veya Jetpack'in WindowMetricsCalculator.computeCurrentWindowMetrics()
) etkinlik bağlamındaki WindowMetrics
öğesine güvenmelidir.
Uygulamanız bir MediaProjection
oluşturuyorsa projeksiyon, projektör uygulamasının çalıştığı ekran bölümünü yakaladığından sınırlar doğru boyutlandırılmalıdır.
Uygulama tamamen yeniden boyutlandırılabiliyorsa etkinlik bağlamı aşağıdaki gibi doğru sınırları döndürür:
Kotlin
val projectionMetrics: WindowMetrics = activityContext .getSystemService(WindowManager::class.java).maximumWindowMetrics
Java
WindowMetrics projectionMetrics = activityContext .getSystemService(WindowManager.class).getMaximumWindowMetrics();
Uygulama tamamen yeniden boyutlandırılamıyorsa bir WindowContext
örneğinden sorgu göndermeli ve WindowManager.getMaximumWindowMetrics()
veya Jetpack yöntemini WindowMetricsCalculator.computeMaximumWindowMetrics()
kullanarak etkinlik sınırlarının WindowMetrics
değerini almalıdır.
Kotlin
val windowContext = context.createWindowContext(mContext.display!!, WindowManager.LayoutParams.TYPE_APPLICATION, null) val projectionMetrics = windowContext.getSystemService(WindowManager::class.java) .maximumWindowMetrics
Java
Context windowContext = context.createWindowContext(mContext.getDisplay(), WindowManager.LayoutParams.TYPE_APPLICATION, null); WindowMetrics projectionMetrics = windowContext.getSystemService(WindowManager.class) .getMaximumWindowMetrics();
Çoklu pencere modundaki tüm uygulamalar
Android 12, çoklu pencere modunu standart davranış haline getirir.
Platform, büyük ekranlarda (sw >= 600dp) uygulama yapılandırmasından bağımsız olarak tüm uygulamaları çoklu pencere modunda destekler. resizeableActivity="false"
ise uygulama, görüntü boyutlarına uyum sağlamak için gerektiğinde uyumluluk moduna geçirilir.
Küçük ekranlarda (sw < 600 dp), sistem etkinliğin çoklu pencere modunda çalışıp çalışamayacağını belirlemek için etkinliğin minWidth
ve minHeight
özelliklerini kontrol eder. resizeableActivity="false"
ise minimum genişlik ve yükseklikten bağımsız olarak uygulamanın çoklu pencere modunda çalışması engellenir.
Daha fazla bilgi için Çoklu pencere desteği başlıklı makaleyi inceleyin.
Büyük ekranlarda kamera önizlemesi
Kamera uygulamaları genellikle cihazın yönü ile kamera önizlemesinin en boy oranı arasında sabit bir ilişki olduğunu varsayar. Ancak katlanabilir cihazlar gibi geniş ekran form faktörleri ve çok pencereli ve çok ekranlı gibi ekran modları bu varsayıma meydan okuyor.
Android 12'de, belirli bir ekran yönünü isteyen ve yeniden boyutlandırılamayan (resizeableActivity="false"
) kamera uygulamaları otomatik olarak içe yerleştirilmiş dikey moda girer. Bu mod, kamera önizlemesinin doğru yönünü ve en boy oranını sağlar. Katlanabilir cihazlarda ve kamera donanım soyutlama katmanı (HAL) bulunan diğer cihazlarda, kamera sensörünün yönünü telafi etmek için kamera çıkışına ek döndürme uygulanır ve kamera çıkışı, uygulamanın kamera önizlemesinin en boy oranına uyacak şekilde kırpılır. Kırpma ve ek döndürme, cihazın yönü ve katlanmış veya katlanmamış durumundan bağımsız olarak kamera önizlemesinin düzgün şekilde sunulmasını sağlar.
Ön plan hizmet bildirimlerinde kullanıcı deneyimi gecikmesi
Android 12 veya sonraki sürümleri çalıştıran cihazlar, kısa süre çalışan ön plan hizmetleri için basitleştirilmiş bir deneyim sunmak amacıyla birkaç istisna dışında ön plan hizmet bildirimlerinin görüntülenmesini 10 saniye geciktirebilir. Bu değişiklik, kısa süreli görevlerin bildirimleri görünmeden önce tamamlanmasına olanak tanır.
Performans
Kısıtlanmış Uygulamayı Beklemeye Alma Grubu
Android 11 (API düzeyi 30), Uygulama Bekleme Paketi olarak kısıtlanmış paketi kullanıma sundu. Android 12'den itibaren bu paket varsayılan olarak etkindir. Kısıtlanmış paket, tüm paketler arasında en düşük önceliğe (ve en yüksek kısıtlamalara) sahiptir. Öncelik sırasına göre yüksekten düşüğe doğru gruplar şunlardır:
- Etkin: Uygulama şu anda kullanılıyor veya çok kısa süre önce kullanıldı.
- Çalışma grubu: Uygulama düzenli olarak kullanılıyor.
- Sık: Uygulama her gün olmasa da sık kullanılır.
- Nadir: Uygulama sık kullanılmaz.
- Kısıtlanmış: Uygulama çok fazla sistem kaynağı tüketiyor veya istenmeyen davranışlar sergileyebilir.
Sistem, uygulamanızın kısıtlanmış grubuna yerleştirilip yerleştirilmeyeceğine karar vermek için kullanım kalıplarının yanı sıra uygulamanızın davranışını da dikkate alır.
Uygulamanız sistem kaynaklarını daha sorumlu bir şekilde kullanıyorsa kısıtlanmış grubuna yerleştirilme olasılığı daha düşüktür. Ayrıca, kullanıcı doğrudan uygulamanızla etkileşimde bulunursa sistem uygulamanızı daha az kısıtlayıcı bir gruba yerleştirir.
Uygulamanızın kısıtlanmış grupta olup olmadığını kontrol etme
Sistemin uygulamanızı kısıtlanmış havuza yerleştirip yerleştirmediğini kontrol etmek için getAppStandbyBucket()
numaralı telefonu arayın.
Bu yöntemin döndürdüğü değer STANDBY_BUCKET_RESTRICTED
ise uygulamanız kısıtlanmış gruptadır.
Kısıtlanmış paket davranışını test etme
Sistem uygulamanızı kısıtlanmış pakete yerleştirdiğinde nasıl davrandığını test etmek için uygulamanızı manuel olarak bu pakete taşıyabilirsiniz. Bunu yapmak için terminal penceresinde aşağıdaki komutu çalıştırın:
adb shell am set-standby-bucket PACKAGE_NAME restricted
Güvenlik ve gizlilik
Yaklaşık konum
Android 12 veya sonraki sürümleri çalıştıran cihazlarda kullanıcılar, uygulamanızın yalnızca yaklaşık konum bilgilerine erişmesini isteyebilir.
Uygulamanız ACCESS_FINE_LOCATION
çalışma zamanında istenen izni istiyorsa kullanıcının uygulamanıza yaklaşık konum erişimi vermesi durumunu ele almak için ACCESS_COARSE_LOCATION
iznini de istemeniz gerekir. Her iki izni de tek bir çalışma zamanında istenen isteğe eklemeniz gerekir.
Şekil 1'de gösterildiği gibi, sistem izinleri iletişim kutusu kullanıcı için aşağıdaki seçenekleri içerir:
- Hassas: Tam konum bilgilerine erişim sağlar.
- Yaklaşık: Yalnızca yaklaşık konum bilgilerine erişim sağlar.
Mikrofon ve kamera açma/kapatma anahtarları
Android 12 veya sonraki sürümlerin yüklü olduğu desteklenen cihazlarda kullanıcılar, tek bir açma/kapatma düğmesine basarak cihazdaki tüm uygulamalar için kamera ve mikrofon erişimini etkinleştirebilir ve devre dışı bırakabilir. Kullanıcılar, 1. resimde gösterildiği gibi Hızlı Ayarlar'dan veya sistem ayarlarındaki Gizlilik ekranından açma/kapatma seçeneklerine erişebilir.
Bu açma/kapatma düğmeleri ve uygulamanızın CAMERA
ve RECORD_AUDIO
izinleriyle ilgili en iyi uygulamalara uyup uymadığını nasıl kontrol edeceğiniz hakkında daha fazla bilgi edinin.
Mikrofon ve kamera göstergeleri
Android 12 veya sonraki sürümleri çalıştıran cihazlarda, bir uygulama mikrofon veya kameraya eriştiğinde durum çubuğunda bir simge görünür.
Bu göstergeler ve uygulamanızın CAMERA
ve RECORD_AUDIO
izinleriyle ilgili en iyi uygulamalara uyup uymadığını nasıl kontrol edeceğiniz hakkında daha fazla bilgi edinin.
İzin paketi görünürlüğü
Android 12 veya sonraki sürümleri çalıştıran cihazlarda, Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefleyen ve aşağıdaki yöntemlerden birini çağıran uygulamalar, uygulamanın diğer uygulamalardaki paket görünürlüğüne göre filtrelenmiş bir sonuç grubu alır:
BouncyCastle uygulaması kaldırıldı
Android 12, tüm AES algoritmaları da dahil olmak üzere daha önce desteği sonlandırılmış kriptografik algoritmaların birçok BouncyCastle uygulamasını kaldırır. Bunun yerine sistem, bu algoritmaların Conscrypt uygulamalarını kullanır.
Aşağıdaki durumlardan herhangi biri geçerliyse bu değişiklik uygulamanızı etkiler:
- Uygulamanız 512 bit anahtar boyutları kullanıyor. Conscrypt bu anahtar boyutunu desteklemiyor. Gerekirse uygulamanızın kriptografi mantığını farklı anahtar boyutları kullanacak şekilde güncelleyin.
Uygulamanız
KeyGenerator
ile geçersiz anahtar boyutları kullanıyor. Conscrypt'inKeyGenerator
uygulaması, BouncyCastle'a kıyasla anahtar parametrelerinde ek doğrulama gerçekleştirir. Örneğin, AES yalnızca 128, 192 ve 256 bit anahtarları desteklediği için Conscrypt, uygulamanızın 64 bit AES anahtarı oluşturmasına izin vermez.BouncyCastle, geçersiz boyutlarda anahtarların oluşturulmasına izin verir ancak bu anahtarlar
Cipher
ile kullanıldığı takdirde daha sonra başarısız olur. Conscrypt daha erken başarısız olur.Galois/Counter Mode (GCM) şifrelerinizi 12 bayttan farklı bir boyut kullanarak başlatıyorsunuz. Conscrypt'in
GcmParameterSpec
uygulaması, NIST'in önerdiği 12 baytlık bir başlatma gerektirir.
Pano erişimi bildirimleri
Android 12 ve sonraki sürümlerde, bir uygulama farklı bir uygulamadaki klip verilerine erişmek için ilk kez getPrimaryClip()
'i çağrdığında kullanıcıya bu pano erişimi hakkında bir pop-up mesajı gösterilir.
Pop-up mesajındaki metin aşağıdaki biçimi içeriyor:
APP pasted from your clipboard.
Klip açıklamasındaki metin hakkında bilgi
Android 12 ve sonraki sürümlerde getPrimaryClipDescription()
aşağıdaki ayrıntıları algılayabilir:
isStyledText()
kullanılarak stilize edilmiş metin.getConfidenceScore()
kullanarak URL'ler gibi farklı metin sınıflandırmaları.
Uygulamalar sistem iletişim kutularını kapatamaz
Uygulamalarla ve sistemle etkileşimde bulunurken kullanıcının kontrolünü iyileştirmek için ACTION_CLOSE_SYSTEM_DIALOGS
intent işleminin desteği Android 12'den itibaren sonlandırıldı. Birkaç özel durum hariç, uygulamanız bu işlemi içeren bir intent çağırmaya çalıştığında sistem, uygulamanızın hedef SDK sürümüne bağlı olarak aşağıdakilerden birini yapar:
- Uygulamanız Android 12 veya sonraki sürümleri hedefliyorsa
SecurityException
oluşur. Uygulamanız Android 11'i (API düzeyi 30) veya daha eski sürümleri hedefliyorsa intent yürütülmez ve Logcat'te aşağıdaki mesaj görünür:
E ActivityTaskManager Permission Denial: \ android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from \ com.package.name requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, \ dropping broadcast.
İstisnalar
Aşağıdaki durumlarda, bir uygulama Android 12 veya sonraki sürümlerde sistem iletişim kutularını kapatmaya devam edebilir:
- Uygulamanız bir araçlar testi çalıştırıyor.
Uygulamanız Android 11 veya daha eski sürümleri hedefliyor ve bildirim çekmecesinin üstünde bir pencere gösteriyor.
Uygulamanız Android 11 veya önceki sürümleri hedefliyor. Ayrıca kullanıcı, bildirimdeki işlem düğmelerini kullanarak bildirimle etkileşime geçmiş ve uygulamanız bu kullanıcı işlemine yanıt olarak bir hizmet veya yayın alıcısını işlemektedir.
Uygulamanız Android 11 veya önceki sürümleri hedefliyor ve etkin bir erişilebilirlik hizmeti var. Uygulamanız Android 12'yi hedefliyorsa ve bildirim çubuğunu kapatmak istiyorsa bunun yerine
GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE
erişilebilirlik işlemini kullanın.
Güvenilmeyen dokunma etkinlikleri engellenir
Android 12, sistem güvenliğini ve iyi bir kullanıcı deneyimini korumak için uygulamaların, yer paylaşımının uygulamayı güvenli olmayan bir şekilde gizlediği dokunma etkinliklerini kullanmasını engeller. Diğer bir deyişle sistem, birkaç istisna dışında belirli pencerelerden geçen dokunmaları engeller.
Bu durumdan etkilenen uygulamalar
Bu değişiklik, dokunma işlemlerinin pencerelerinden geçmesine izin veren uygulamaları (ör. FLAG_NOT_TOUCHABLE
işaretçisini kullanarak) etkiler. Aşağıda bazı örnekler verilmiştir, ancak liste bunlarla sınırlı değildir:
TYPE_APPLICATION_OVERLAY
kullanan veFLAG_NOT_TOUCHABLE
işaretini kullanan pencereler gibiSYSTEM_ALERT_WINDOW
iznine ihtiyaç duyan yer paylaşımları.FLAG_NOT_TOUCHABLE
işaretini kullanan etkinlik pencereleri.
İstisnalar
Aşağıdaki durumlarda "geçiş" dokunmalarına izin verilir:
- Uygulamanızdaki etkileşimler. Uygulamanız yer paylaşımını gösterir ve yer paylaşımı yalnızca kullanıcı uygulamanızla etkileşimde bulunduğunda görünür.
Güvenilir pencereler. Bu pencereler aşağıdakileri içerir ancak bunlarla sınırlı değildir:
Görünmez pencereler. Pencerenin kök görünümü
GONE
veyaINVISIBLE
olmalıdır.Tamamen şeffaf pencereler. Pencere için
alpha
özelliği 0,0'dır.Yeterli düzeyde saydam sistem uyarı pencereleri. Sistem, birleştirilmiş opaklığın sistemde dokunma işlemleri için maksimum karartma opaklığından az veya bu değere eşit olduğunda bir dizi sistem uyarı penceresinin yeterince saydam olduğunu düşünür. Android 12'de bu maksimum opaklık varsayılan olarak 0, 8'dir.
Güvenilmeyen bir dokunuşun engellendiğini algılama
Bir dokunma işlemi sistem tarafından engellenirse Logcat aşağıdaki mesajı günlüğe kaydeder:
Untrusted touch due to occlusion by PACKAGE_NAME
Değişikliği test etme
Güvenilmeyen dokunuşlar, Android 12 veya sonraki sürümleri çalıştıran cihazlarda varsayılan olarak engellenir. Güvenilmeyen dokunuşlara izin vermek için terminal penceresinde aşağıdaki ADB komutunu çalıştırın:
# A specific app adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.app # All apps # If you'd still like to see a Logcat message warning when a touch would be # blocked, use 1 instead of 0. adb shell settings put global block_untrusted_touches 0
Davranışı varsayılan ayarlara döndürmek için (güvenilmeyen dokunuşlar engellenir) aşağıdaki komutu çalıştırın:
# A specific app adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.app # All apps adb shell settings put global block_untrusted_touches 2
Etkinlik yaşam döngüsü
Kök başlatıcı etkinlikleri artık Geri düğmesine basıldığında sonlandırılmıyor
Android 12, görevlerin kökünde bulunan başlatıcı etkinliklerinde sistem geri tuşuna basmanın varsayılan işleyişini değiştirir. Önceki sürümlerde sistem, Geri tuşuna basıldığında bu etkinlikleri bitiriyordu. Android 12'de sistem artık etkinliği bitirmek yerine etkinliği ve görevini arka plana taşır. Yeni davranış, ana sayfa düğmesi veya hareket kullanılarak bir uygulamadan çıkarken mevcut davranışla aynıdır.
Çoğu uygulama için bu değişiklik, uygulamanızdan çıkmak üzere Geri'yi kullanan kullanıcıların uygulamayı kapalı durumdan tamamen yeniden başlatmak yerine sıcak durumdan daha hızlı bir şekilde devam ettirebileceği anlamına gelir.
Uygulamalarınızı bu değişiklikle test etmenizi öneririz. Uygulamanız şu anda geri gezinmeyi işlemek ve Activity
'ı bitirmek için onBackPressed()
'yi geçersiz kılıyorsa uygulamanızı, bitirmek yerine super.onBackPressed()
'e kadar çağrı yapacak şekilde güncelleyin. super.onBackPressed()
çağrısı, uygun olduğunda etkinliği ve görevini arka plana taşır ve kullanıcılara uygulamalar arasında daha tutarlı bir gezinme deneyimi sunar.
Ayrıca, genel olarak onBackPressed()
'yi geçersiz kılmak yerine özel geri gezinme sağlamak için AndroidX Activity API'lerini kullanmanızı öneririz. AndroidX Activity API'leri, sistem Geri tuşuna basma işlemini durduran bileşen yoksa otomatik olarak uygun sistem davranışına geçer.
Grafikler ve resimler
Yenileme hızı geçişi iyileştirildi
Android 12'de, setFrameRate()
kullanılarak yapılan yenileme hızı değişiklikleri, ekranın yeni yenileme hızına sorunsuz geçişi destekleyip desteklemediğinden bağımsız olarak gerçekleşebilir. Sorunsuz geçiş, bir veya iki saniye boyunca siyah ekran gibi görsel kesintilerin olmadığı bir geçiştir. Daha önce, ekran sorunsuz geçişi desteklemiyorsa setFrameRate()
çağrıldıktan sonra genellikle aynı yenileme hızını kullanmaya devam ediyordu. getAlternativeRefreshRates()
numaralı telefonu arayarak yeni yenilemeye geçişin sorunsuz olup olmayacağını önceden belirleyebilirsiniz.
Genellikle geri çağırma işlevi onDisplayChanged()
, yenileme hızı geçişi tamamlandıktan sonra çağrılır ancak harici olarak bağlı bazı ekranlarda kesintisiz olmayan bir geçiş sırasında çağrılır.
Bunu nasıl uygulayabileceğinize dair bir örnek aşağıda verilmiştir:
Kotlin
// Determine whether the transition will be seamless. // Non-seamless transitions may cause a 1-2 second black screen. val refreshRates = this.display?.mode?.alternativeRefreshRates val willBeSeamless = Arrays.asList<FloatArray>(refreshRates).contains(newRefreshRate) // Set the frame rate even if the transition will not be seamless. surface.setFrameRate(newRefreshRate, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS)
Java
// Determine whether the transition will be seamless. // Non-seamless transitions may cause a 1-2 second black screen. Display display = context.getDisplay(); // API 30+ Display.Mode mode = display.getMode(); float[] refreshRates = mode.getAlternativeRefreshRates(); boolean willBeSeamless = Arrays.asList(refreshRates).contains(newRefreshRate); // Set the frame rate even if the transition will not be seamless. surface.setFrameRate(newRefreshRate, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS);
Bağlantı
Passpoint güncellemeleri
Android 12'ye aşağıdaki API'ler eklenmiştir:
isPasspointTermsAndConditionsSupported()
: Hükümler ve koşullar, ağ dağıtımlarının açık ağları kullanan güvenli olmayan giriş portallarını güvenli bir Passpoint ağı ile değiştirmesine olanak tanıyan bir Passpoint özelliğidir. Şartlar ve koşulların kabul edilmesi gerektiğinde kullanıcıya bir bildirim gösterilir. Şartlar ve koşullara göre sınırlandırılmış Passpoint ağları öneren uygulamaların, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırması gerekir. Cihaz bu özelliği desteklemiyorsa söz konusu ağa bağlanamaz ve alternatif veya eski bir ağ önerilmelidir.isDecoratedIdentitySupported()
: Önek süslemesi içeren ağlarda kimlik doğrulama yapılırken süslenmiş kimlik öneki, ağ operatörlerinin AAA ağının içindeki birden fazla proxy aracılığıyla açık yönlendirme yapmak için Ağ Erişim Tanımlayıcısını (NAI) güncellemelerine olanak tanır (bu konuda daha fazla bilgi için RFC 7542'ye bakın).Android 12, bu özelliği PPS-MO uzantıları için WBA spesifikasyonuna uygun olacak şekilde uygular. Süslenmiş kimlik gerektiren Passpoint ağları öneren uygulamaların, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırması gerekir. Cihaz bu özelliği desteklemiyorsa kimlik süslenmez ve ağda kimlik doğrulama başarısız olabilir.
Passpoint önerisi oluşturmak için uygulamaların PasspointConfiguration
, Credential
ve HomeSp
sınıflarını kullanması gerekir. Bu sınıflar, Wi-Fi Alliance Passpoint spesifikasyonunda tanımlanan Passpoint profilini açıklar.
Daha fazla bilgi için İnternet bağlantısı için kablosuz öneri API'si başlıklı makaleyi inceleyin.
SDK olmayan arayüz kısıtlamaları güncellendi
Android 12, Android geliştiricilerle yapılan ortak çalışmalara ve en son şirket içi testlere dayalı olarak kısıtlanmış SDK dışı arayüzlerin güncellenmiş listelerini içerir. Mümkün olduğunda, SDK olmayan arayüzleri kısıtlamadan önce herkese açık alternatiflerin kullanılabildiğinden emin oluruz.
Uygulamanız Android 12'yi hedeflemiyorsa bu değişikliklerin bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK dışı arayüzleri kullanabilseniz de (uygulamanızın hedef API düzeyine bağlı olarak) SDK dışı herhangi bir yöntem veya alanı kullanmak her zaman uygulamanızın bozulma riskini artırır.
Uygulamanızda SDK dışı arayüzlerin kullanılıp kullanılmadığını öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK dışı arayüzlere dayanıyorsa SDK alternatiflerine geçiş planlamaya başlamanız gerekir. Bununla birlikte, bazı uygulamaların SDK dışı arayüzleri kullanmanın geçerli kullanım alanları olduğunu biliyoruz. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmanın alternatifini bulamıyorsanız yeni bir herkese açık API isteğinde bulunmanız gerekir.
Android'in bu sürümündeki değişiklikler hakkında daha fazla bilgi edinmek için Android 12'deki SDK dışı arayüz kısıtlamalarında yapılan güncellemeler başlıklı makaleyi inceleyin. Genel olarak SDK olmayan arayüzler hakkında daha fazla bilgi edinmek için SDK olmayan arayüzlerde kısıtlamalar başlıklı makaleyi inceleyin.