Android 12 platformu, uygulamanızı etkileyebilecek davranış değişikliklerini içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion
ne olursa olsun Android 12 ile çalıştırılan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeli ve ardından uygun olduğu durumlarda bunları doğru bir şekilde desteklemek için gereken değişiklikleri yapmalısınız.
Yalnızca Android 12'yi hedefleyen uygulamaları etkileyen davranış değişiklikleri listesini de incelemeyi unutmayın.
Kullanıcı deneyimi
Fazla kaydırma efektini uzatın
Android 12 ve sonraki sürümleri çalıştıran cihazlarda fazla 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, görsel öğeler sürükleme etkinliğinde genişleyip geri seker ve bir hızla kaçış etkinliğinde geri seker.
Daha fazla bilgi için kaydırma hareketlerini animasyon haline getirme kılavuzuna bakın.
Uygulama başlangıç ekranları
Daha önce Android 11 veya önceki sürümlerde özel başlangıç ekranı uyguladıysanız Android 12'den itibaren doğru şekilde görüntülendiğinden emin olmak için uygulamanızı SplashScreen
API'ye taşımanız gerekir. Uygulamanızı taşımazsanız uygulama açılış
deneyin bozulur veya istenmeyen bir şekilde sonuçlanır.
Talimatlar için Mevcut başlangıç ekranı uygulamanızı Android 12'ye taşıma bölümüne bakın.
Buna ek olarak, Android 12 sürümünden itibaren sistem tüm uygulamalar için baştan başlatma ve hazır başlatma sırasında her zaman yeni Android sisteminin varsayılan başlangıç ekranını uygular.
Varsayılan olarak bu sistem varsayılan başlangıç ekranı, uygulamanızın başlatıcı simgesi öğesi ve temanızın windowBackground
öğesi (tek bir renkse) kullanılarak oluşturulur.
Daha ayrıntılı bilgi için başlangıç ekranları geliştirici kılavuzuna bakın.
Web intent çözümleme
Android 12'den (API düzeyi 31) başlayarak, genel bir web amacı, yalnızca uygulamanız ilgili web amacında yer alan belirli alan için onaylanırsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan adı için onaylanmazsa, web amacı bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Uygulamalar aşağıdaki işlemlerden birini yaparak bu onayı alabilir:
Android Uygulama Bağlantıları'nı kullanarak alanı doğrulayın.
Sistem, Android 12 veya sonraki sürümleri hedefleyen uygulamalarda Android Uygulama Bağlantılarını otomatik olarak doğrulama şeklini değiştirir. Uygulamanızın amaç 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'leri çağırıyorsa kullanıcıdan işlemi onaylamasını isteyen bir istem veya iletişim kutusu eklemeyi düşünün.
Hareketle gezinme için kapsamlı mod iyileştirmeleri
Android 12, kullanıcıların kapsamlı moddayken hareketle gezinme komutlarını gerçekleştirmelerini kolaylaştırmak için mevcut davranışları birleştirir. Ayrıca Android 12, sürekli yoğun içerik modu için geriye dönük uyumluluk davranışı sunar.
Display#getRealSize ve getRealMetrics: kullanımdan kaldırma ve kısıtlamalar
Android cihazlar büyük ekranlar, tabletler ve katlanabilir cihazlar gibi
pek çok farklı form faktöründe sunulmaktadır. İçeriği her cihaza uygun şekilde oluşturmak için uygulamanızın ekran veya görüntü boyutunu belirlemesi gerekir. Zaman içinde Android, bu bilgileri almak için farklı API'ler sağlamıştır. Android 11'de WindowMetrics
API'yi kullanıma sunduk ve şu yöntemleri kullanımdan kaldırdık:
Android 12'de WindowMetrics
kullanmanızı önermeye devam ediyor ve bu yöntemleri kullanımdan kaldırıyoruz:
Android 12, uygulama sınırlarını almak amacıyla Display API'lerini kullanan uygulamaların davranışını azaltmak amacıyla, tamamen yeniden boyutlandırılamayan uygulamalar için API'lerin döndürdüğü değerleri kısıtlar. Bu durum, bu bilgileri MediaProjection
ile kullanan uygulamaları etkileyebilir.
Uygulamalar, pencere sınırlarını sorgulamak için WindowMetrics
API'lerini, mevcut yoğunluğu sorgulamak için de Configuration.densityDpi
API'lerini kullanmalıdır.
Android'in eski sürümleriyle daha kapsamlı uyumluluk için Android 4.0 (API düzeyi 14) ve sonraki sürümleri destekleyen WindowMetrics
sınıfını içeren Jetpack WindowManager
kitaplığını kullanabilirsiniz.
WindowMetrics'in kullanımıyla ilgili örnekler
Öncelikle, uygulama etkinliklerinizin tamamen yeniden boyutlandırılabilir olduğundan emin olun.
Bir etkinlik, kullanıcı arayüzüyle ilgili tüm çalışmalar (özellikle WindowManager.getCurrentWindowMetrics()
veya Jetpack WindowMetricsCalculator.computeCurrentWindowMetrics()
) için etkinlik bağlamından WindowMetrics
temel almalıdır.
Uygulamanız bir MediaProjection
oluşturuyorsa projeksiyon, projektör uygulamasının çalıştığı ekran bölümünü yakaladığından sınırların doğru boyutlandırılması gerekir.
Uygulama tamamen yeniden boyutlandırılabiliyorsa etkinlik bağlamı şu şekilde 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ılamazsa bir WindowContext
örneğinden sorgu yürütmeli 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.
Büyük ekranlarda (sw >= 600 dp) platform, uygulama yapılandırmasından bağımsız olarak çoklu pencere modundaki tüm uygulamaları destekler. resizeableActivity="false"
ise uygulama, görüntüleme boyutlarının barındırılması için gerektiğinde uyumluluk moduna alınır.
Küçük ekranlarda (sw < 600dp) sistem, bir etkinliğin çoklu pencere modunda çalışıp çalışmayacağını belirlemek için etkinliğin minWidth
ve minHeight
özelliklerini kontrol eder. resizeableActivity="false"
ise uygulamanın minimum genişlik ve yükseklikten bağımsız olarak çoklu pencere modunda çalışması engellenir.
Daha fazla bilgi için Çoklu pencere desteği başlıklı makaleye bakın.
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 büyük ekran formu faktörleri ve çoklu pencere ile çoklu ekran gibi görüntüleme modları bu varsayıma meydan okuyor.
Android 12'de, belirli bir ekran yönü isteyen ve yeniden boyutlandırılamayan (resizeableActivity="false"
) kamera uygulamaları, otomatik olarak içe doğru dikey moda girer. Bu mod, kamera önizlemesinin doğru yönü ve en boy oranını sağlar. Kamera donanım soyutlama katmanı (HAL) bulunan katlanabilir cihazlarda ve 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 ekstra döndürme işlemleri, cihazın yönü ve katlanmış ya da açılmış halden bağımsız olarak kamera önizlemesinin düzgün şekilde gösterilmesini sağlar.
Ön plan hizmet bildirimleri için kullanıcı deneyimi gecikmesi
Android 12 veya sonraki sürümleri çalıştıran cihazlar, kısa süreli ön plan hizmetleri için daha kolay bir deneyim sağlamak amacıyla birkaç istisna dışında ön plan hizmet bildirimlerinin gösterilmesini 10 saniye geciktirebilir. Bu değişiklik, kısa süreli görevlere, bildirimleri gösterilmeden önce tamamlanma olanağı tanıyor.
Performans
Kısıtlanmış Uygulamayı Beklemeye Alma Paketi
Android 11 (API düzeyi 30), Uygulama Beklemeye Alma Paketi olarak kısıtlanmış paketi kullanıma sunmuştur. 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. Gruplar, yüksekten düşüğe öncelik sırasına göre şöyledir:
- Etkin: Uygulama şu anda kullanılıyor veya çok kısa bir süre önce kullanılmış.
- Çalışma grubu: Uygulama normal kullanımdadır.
- Sık: Uygulama sıklıkla kullanılır, ancak her gün kullanılmaz.
- Nadir: Uygulama sık kullanılmıyor.
- Kısıtlı: Uygulama çok fazla sistem kaynağı tüketir veya istenmeyen davranışlar gösterebilir.
Sistem, uygulamanızı kısıtlanmış pakete yerleştirip yerleştirmeyeceğinize karar vermek için kullanım alışkanlıklarının yanı sıra uygulamanızın davranışını da dikkate alır.
Uygulamanızın, sistem kaynaklarını daha sorumlu bir şekilde kullanması durumunda uygulamanızın kısıtlanmış pakete dahil edilme 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 pakete yerleştirir.
Uygulamanızın kısıtlanmış pakette olup olmadığını kontrol etme
Sistemin uygulamanızı kısıtlanmış pakete yerleştirip yerleştirmediğini kontrol etmek için getAppStandbyBucket()
numaralı telefonu arayın.
Bu yöntemin döndürülen değeri STANDBY_BUCKET_RESTRICTED
ise uygulamanız kısıtlanmış pakettedir.
Kısıtlanmış paket davranışını test etme
Sistem uygulamanızı kısıtlanmış pakete yerleştirdiğinde uygulamanızın nasıl davranacağını test etmek için uygulamanızı manuel olarak bu pakete taşıyabilirsiniz. Bu işlemi yapmak için bir 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şmesi için istekte bulunabilir.
Uygulamanız ACCESS_FINE_LOCATION
çalışma zamanı iznini istiyorsa kullanıcının uygulamanıza yaklaşık konum erişimi verdiği durumda da ACCESS_COARSE_LOCATION
iznini talep etmeniz gerekir. Her iki izni de tek bir çalışma zamanı isteğine dahil etmeniz gerekir.
Sistem izinleri iletişim kutusu, Şekil 1'de gösterildiği gibi kullanıcı için aşağıdaki seçenekleri içerir:
- Tam: 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ümleri çalıştıran desteklenen cihazlar, kullanıcıların tek bir açma/kapatma seçeneğine basarak cihazdaki tüm uygulamalar için kamera ve mikrofon erişimini etkinleştirip devre dışı bırakmasına olanak tanır. Kullanıcılar, şekil 1'de gösterilen Hızlı Ayarlar'dan veya sistem ayarlarındaki Gizlilik ekranından açıp kapatılabilir seçeneklere erişebilirler.
Bu geçişler ve uygulamanızın CAMERA
ile RECORD_AUDIO
izinleriyle ilgili en iyi uygulamalara uygun olup olmadığı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 mikrofona veya kameraya eriştiğinde durum çubuğunda bir simge görünür.
Bu göstergeler ve uygulamanızın CAMERA
ile RECORD_AUDIO
izinleriyle ilgili en iyi uygulamalara uygun olup olmadığı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 (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 bağlı olarak filtrelenmiş bir sonuç grubu alır:
BouncyCastle uygulaması kaldırıldı
Android 12, daha önce kullanımdan kaldırılmış olan ve tüm AES algoritmaları dahil olmak üzere birçok kriptografi algoritmasının BouncyCastle uygulamasını kaldırır. Sistem bunun yerine bu algoritmaların Conscrypt uygulamalarını kullanır.
Aşağıdakilerden 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 parametrelerde ek doğrulama gerçekleştirir. Örneğin, AES yalnızca 128, 192 ve 256 bit anahtarları desteklediğinden Conscrypt, uygulamanızın 64 bit AES anahtarı oluşturmasına izin vermez.BouncyCastle, geçersiz boyutlarda anahtarların oluşturulmasına izin veriyor ancak bu anahtarlar bir
Cipher
ile kullanıldığında daha sonra başarısız oluyor. Conscrypt daha erken başarısız oluyor.Galois/Counter Mode (GCM) şifrelerinizi 12 bayttan farklı bir boyut kullanarak başlatırsınız. Conscrypt'in
GcmParameterSpec
uygulaması için NIST'nin önerdiği şekilde 12 baytlık başlatma işlemi gerekir.
Pano erişim bildirimleri
Android 12 ve sonraki sürümlerde, bir uygulama farklı bir uygulamadan klip verilerine erişmek için ilk kez getPrimaryClip()
çağrısı yaptığında, durum mesajıyla kullanıcıya bu pano erişimi bildirilir.
Durum mesajındaki metin şu biçimi içerir:
APP pasted from your clipboard.
Klip açıklamasındaki metinle ilgili bilgiler
getPrimaryClipDescription()
, Android 12 ve sonraki sürümlerde aşağıdaki ayrıntıları algılayabilir:
isStyledText()
kullanılarak stilize edilmiş metin.getConfidenceScore()
kullanılan URL'ler gibi farklı metin sınıflandırmaları.
Uygulamalar sistem iletişim kutularını kapatamaz
Uygulamalar ve sistemle etkileşimde bulunurken kullanıcı kontrolünü iyileştirmek için ACTION_CLOSE_SYSTEM_DIALOGS
amaç işlemi Android 12'den itibaren kullanımdan kaldırılmıştır. Birkaç özel durum dışında, uygulamanız bu işlemi içeren bir amaç çağırmaya çalıştığında sistem, uygulamanızın hedef SDK sürümüne göre aşağıdakilerden birini yapar:
- Uygulamanız Android 12 veya sonraki bir sürümü hedefliyorsa
SecurityException
görüntülenir. Uygulamanız Android 11 (API düzeyi 30) veya önceki sürümleri hedefliyorsa amaç 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, uygulamalar Android 12 veya sonraki sürümlerde sistem iletişim kutularını yine kapatabilir:
- Uygulamanız bir araç testi çalıştırıyor.
Uygulamanız Android 11 veya önceki 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ı, muhtemelen bildirimin işlem düğmelerini kullanarak bir bildirimle etkileşime geçmiştir ve uygulamanız bu kullanıcı işlemine yanıt olarak bir hizmet veya yayın alıcısını işliyordur.
Uygulamanız Android 11 veya önceki sürümleri hedefliyor ve etkin bir erişilebilirlik hizmetine sahip. 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 tüketmesini engeller. Diğer bir deyişle, sistem belirli pencerelerden geçen dokunmaları birkaç istisna dışında engeller.
Bu durumdan etkilenen uygulamalar
Bu değişiklik, örneğin FLAG_NOT_TOUCHABLE
işaretini kullanarak, pencerelerden dokunmaların geçmesini seçen uygulamaları etkiler. Aşağıda bazı örnekler verilmiştir, ancak liste bunlarla sınırlı değildir:
TYPE_APPLICATION_OVERLAY
veFLAG_NOT_TOUCHABLE
işaretini kullanan pencereler gibiSYSTEM_ALERT_WINDOW
izni gerektiren bindirmeler.FLAG_NOT_TOUCHABLE
işaretini kullanan etkinlik pencereleri.
İstisnalar
Aşağıdaki durumlarda, "geçişli" dokunmalara 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şime geçtiğinde görünür.
Güvenilir pencereler. Bu pencereler arasında aşağıdakiler yer alır (ancak bunlarla sınırlı değildir):
Görünmez pencereler. Pencerenin kök görünümü
GONE
veyaINVISIBLE
şeklindedir.Tamamen şeffaf pencereler. Pencerenin
alpha
özelliği 0,0'dır.Yeterince yarı saydam sistem uyarı pencereleri. Birleştirilmiş opaklık, dokunmalar için sistemin maksimum gizleme opaklığından düşük veya buna eşit olduğunda sistem, bir dizi sistem uyarı penceresini yeterince yarı saydam olarak kabul eder. Android 12'de bu maksimum opaklık varsayılan olarak 0, 8'dir.
Güvenilmeyen bir dokunma engellendiğinde algıla
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 et
Güvenilmeyen dokunmalar, Android 12 veya sonraki sürümleri çalıştıran cihazlarda varsayılan olarak engellenir. Güvenilmeyen dokunmalara izin vermek için bir 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ılana geri döndürmek için (güvenilmeyen dokunmalar 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ü
Geri basıldığında kök başlatıcı etkinlikleri artık tamamlanmıyor
Android 12, sistemin varsayılan işleme şeklini değiştirir. Görevlerin temelindeki başlatıcı etkinliklerine geri basma işlemleri. Önceki sürümlerde, sistem bu işlemleri Geri tuşuna basıldığında bitiriyordu. Android 12'de sistem artık etkinliği bitirmek yerine etkinliği ve görevini arka plana taşıyor. Yeni davranış, Ana Sayfa düğmesi veya hareketi kullanılarak bir uygulamadan çıkılırken geçerli olan davranışla eşleşir.
ACTION_MAIN
hem de CATEGORY_LAUNCHER
ile Amaç filtresi tanımlayan etkinliklere uygular. Sistem, diğer
etkinliklerde de, Geri'ye basma işlemini önceden olduğu gibi, işlemi bitirerek gerçekleştirir.Çoğu uygulama için bu değişiklik, uygulamanızdan çıkmak için Geri'yi kullanan kullanıcıların, uygulamayı yeni moddan tamamen yeniden başlatmak yerine, hazır durumda durumundan daha hızlı bir şekilde devam ettirebilecekleri anlamına gelir.
Bu değişiklikle uygulamalarınızı test etmenizi öneririz. Uygulamanız, Geri gezinmeyi işlemek ve Activity
işlemini tamamlamak için şu anda onBackPressed()
öğesini geçersiz kılıyorsa uygulamanızı bitirmek yerine super.onBackPressed()
değerine geri çağıracak şekilde güncelleyin. super.onBackPressed()
çağrısı, uygun olduğunda etkinliği ve görevini arka plana taşır ve kullanıcılar için uygulamalar genelinde daha tutarlı bir gezinme deneyimi sağlar.
Ayrıca, genel olarak onBackPressed()
öğesini geçersiz kılmak yerine özel geri gezinme sağlamak için AndroidX Activity API'lerini kullanmanızı öneririz. Geri basılan sisteme müdahale eden herhangi bir bileşen yoksa AndroidX Activity API'leri otomatik olarak uygun sistem davranışını uygular.
Grafikler ve resimler
İyileştirilmiş yenileme hızı geçişi
Android 12'de setFrameRate()
kullanılarak yenileme hızı değişiklikleri, ekranın yeni yenileme hızına sorunsuz bir geçişi destekleyip desteklemediğinden bağımsız olarak gerçekleşebilir. Sorunsuz geçiş, bir iki saniye siyah ekran gibi görsel kesintiler olmayan geçiştir. Önceden, ekran sorunsuz geçişi desteklemiyorsa setFrameRate()
çağrıldıktan sonra genellikle aynı yenileme hızını kullanmaya devam ediyordu. getAlternativeRefreshRates()
yöntemini çağırarak yeni yenilemeye geçişin sorunsuz olup olmayacağını önceden belirleyebilirsiniz.
Geri çağırma (onDisplayChanged()
) genellikle yenileme hızı geçişi tamamlandıktan sonra çağrılır. Ancak harici olarak bağlı bazı ekranlarda, sorunsuz olmayan geçiş sırasında çağrılır.
Aşağıda, bunu nasıl uygulayabileceğinize ilişkin bir örnek 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 eklenir:
isPasspointTermsAndConditionsSupported()
: Hükümler ve Koşullar, ağ dağıtımlarının açık ağlar kullanan güvenli olmayan giriş portallarının yerini güvenli bir Passpoint ağıyla değiştirmesini sağlayan bir Passpoint özelliğidir. Şartlar ve koşulların kabul edilmesi gerektiğinde kullanıcıya bir bildirim gösterilir. Şartlar ve koşullarla korunan Passpoint ağlarını öneren uygulamalar, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırmalıdır. Cihaz bu özelliği desteklemiyorsa bu ağa bağlanamaz ve alternatif veya eski bir ağ önerilmelidir.isDecoratedIdentitySupported()
: Önek süslemesiyle ağlara kimlik doğrularken, ağ operatörlerinin Ağ Erişim Tanımlayıcısını (NAI) bir AAA ağı içindeki birden çok proxy üzerinden açık yönlendirme gerçekleştirmek için güncellemesini sağlar (bu konuda daha fazla bilgi için RFC 7542'yi inceleyin).Android 12, bu özelliği PPS-MO uzantılarına ilişkin WBA spesifikasyonuna uymak için uygular. Süslü kimlik gerektiren Passpoint ağlarını öneren uygulamalar, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırmalıdır. Cihaz bu özelliği desteklemiyorsa kimlik işlenmez ve ağ için kimlik doğrulaması 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 tanımlar.
İnternet bağlantısı için Wi-Fi öneri API'si başlıklı makalede daha fazla bilgiye ulaşabilirsiniz.
SDK dışı arayüz kısıtlamaları güncellendi
Android 12, Android geliştiricileriyle yapılan ortak çalışmalara ve en son dahili testlere göre 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ılabilir olmasını sağlarız.
Uygulamanız Android 12'yi hedeflemiyorsa bu değişikliklerden bazıları sizi hemen etkilemeyebilir. Bununla birlikte, şu anda bazı SDK dışı arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilseniz de herhangi bir SDK olmayan yöntem veya alanın kullanılması her zaman uygulamanızın bozulma riskini artırır.
Uygulamanızın SDK olmayan arayüzler kullanıp kullanmadığından emin değilseniz öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK olmayan arayüzlere dayanıyorsa SDK alternatiflerine geçiş planlamaya başlamanız gerekir. Yine de, bazı uygulamaların SDK dışı arayüz kullanımıyla ilgili geçerli kullanım alanları olduğunun farkındayız. Uygulamanızdaki bir özellik için SDK olmayan arayüz kullanmaya alternatif 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 bölümüne bakın. Genel olarak SDK olmayan arayüzler hakkında daha fazla bilgi edinmek için SDK dışı arayüzlerle ilgili kısıtlamalar bölümüne bakın.