Android 12 platformu, uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion
ne olursa olsun Android 12 ile çalışan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeli ve ardından uygun durumlarda bunları doğru ş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 mutlaka inceleyin.
Kullanıcı deneyimi
Fazla kaydırma efektini uzat
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 bir fazla kaydırma etkinliği, görsel öğelerin parlamasına neden olur. Android 12 ve sonraki sürümlerde ise görsel öğeler bir drag etkinliğinde genişleyip geri seker ve bir sallantılı etkinlik sonucunda geri seker.
Daha fazla bilgi için kaydırma hareketlerini canlandırma rehberine 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
lansma deneyimi bozulur veya istenmeyen şekilde olur.
Talimatlar için Mevcut başlangıç ekranı uygulamanızı Android 12'ye taşıma başlıklı makaleye göz atın.
Ayrıca Android 12'den itibaren sistem tüm uygulamalar için baştan başlatma ve hazır durumda başlatma sırasında her zaman yeni Android sisteminin varsayılan başlangıç ekranını uygular.
Sistemin varsayılan başlangıç ekranı varsayılan olarak uygulamanızın başlatıcı simgesi öğesi ve temanızın windowBackground
öğesi (tek bir renkse) 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 amacında yer alan belirli alan için onaylanırsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan için onaylanmazsa web amacı, kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Uygulamalar bu onayı aşağıdakilerden birini yaparak 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 amaç filtrelerinde
BROWSABLE
kategorisini eklediğinizden vehttps
şemasını desteklediğinizden emin olun.Android 12 veya sonraki sürümlerde, uygulamanızın Android Uygulama Bağlantılarını manuel olarak doğrulayarak bu güncellenen mantığın uygulamanızı nasıl etkilediğini test edebilirsiniz.
Kullanıcıdan uygulamanızı sistem ayarlarındaki 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. Buna ek olarak Android 12, bağlantılı yapışkan mod 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 ekran, tablet ve katlanabilir cihazlar gibi
birçok farklı form faktöründe kullanılabilir. İç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 bilgilerin alınması için farklı API'ler sağlamıştır. Android 11'de WindowMetrics
API'yi kullanıma sunduk ve aşağıdaki yöntemleri kullanımdan kaldırdık:
Android 12'de WindowMetrics
kullanımını önermeye devam ediyor ve aşağıdaki yöntemleri kullanımdan kaldırıyoruz:
Android 12, uygulama sınırlarını almak için 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ına ilişkin ö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'in WindowMetricsCalculator.computeCurrentWindowMetrics()
) için etkinlik bağlamından WindowMetrics
temel alınmalıdır.
Uygulamanız bir MediaProjection
oluşturuyorsa projektör uygulamasının çalıştığı ekran bölümünü yakaladığı için sınırlar doğru şekilde boyutlandırılmalıdır.
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ılamıyorsa 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 ekran boyutlarının barındırılması için gerektiğinde uygulama uyumluluk moduna alınır.
Sistem, küçük ekranlarda (sw < 600 dp) bir etkinliğin birden fazla pencere modunda çalıştırılıp çalıştırılamayacağını belirlemek için minWidth
ve minHeight
değerlerini kontrol eder. resizeableActivity="false"
söz konusuysa 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ı 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 büyük ekran biçimi faktörleri ve çoklu pencere ile çoklu ekran gibi görüntü modları bu varsayımı zorlar.
Android 12'de, belirli bir ekran yönü isteyen ve yeniden boyutlandırılamayan kamera uygulamaları (resizeableActivity="false"
), otomatik olarak kamera önizlemesinin doğru yönünü ve en boy oranını sağlayan dikey dikey moda girer. 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 rotasyon 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 özellikleri, cihazın yönü ve katlanmış ya da açılmış durumundan bağımsız olarak kamera önizlemesinin doğru ş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 basitleştirilmiş 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, bildirimler gösterilmeden önce tamamlama fırsatı sunuyor.
Performans
Kısıtlanmış Uygulamayı Beklemeye Alma Paketi
Android 11 (API düzeyi 30), Uygulama Bekleme 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. Öncelik sırası yüksekten düşüğe doğru bölümler şunlardır:
- Etkin: Uygulama şu anda kullanılıyor veya çok kısa süre önce kullanıldı.
- Çalışma grubu: Uygulama normal şekilde kullanılıyor.
- Sık: Uygulama sık sık 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 sergileyebilir.
Sistem, uygulamanızı kısıtlanmış pakete yerleştirip yerleştirmeyeceğine 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 sistem kaynaklarını daha sorumlu bir şekilde kullanırsa uygulamanızın kısıtlanmış pakete eklenme 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
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. Bunun 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, uygulamanızın yalnızca yaklaşık konum bilgilerine erişmesini isteyebilirler.
Uygulamanız ACCESS_FINE_LOCATION
çalışma zamanı iznini istiyorsa kullanıcının uygulamanıza yaklaşık konum erişimi verdiği durumu ele almak için ACCESS_COARSE_LOCATION
iznini de istemeniz 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ın kamera ve mikrofon erişimini etkinleştirip devre dışı bırakmasına olanak tanır. Kullanıcılar, şekil 1'de gösterildiği gibi Hızlı Ayarlar'dan veya sistem ayarlarındaki Gizlilik ekranından açılıp kapatılabilir seçeneklere erişebilirler.
Bu açma/kapatma işlemleri 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 hakkında daha fazla bilgi edinin ve uygulamanızın CAMERA
ile RECORD_AUDIO
izinleriyle ilgili en iyi uygulamalara uygun olup olmadığını nasıl kontrol edeceğinizi öğrenin.
İ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, tüm AES algoritmaları dahil olmak üzere, daha önce kullanımdan kaldırılan birçok BouncyCastle kriptografi algoritmasının uygulamasını kaldırır. Sistem bunun yerine bu algoritmaların Conscrypt uygulamalarını kullanır.
Aşağıdaki durumlarda bu değişiklik uygulamanızı etkiler:
- Uygulamanız 512 bit anahtar boyutları kullanıyor. Conscrypt bu anahtar boyutunu desteklemiyor. Gerekirse uygulamanızın şifreleme mantığını farklı anahtar boyutları kullanacak şekilde güncelleyin.
Uygulamanız,
KeyGenerator
ile geçersiz anahtar boyutları kullanıyor. Conscrypt'inKeyGenerator
uygulaması, BouncyCastle ile karşılaştırıldığında 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 olur. Conscrypt daha erken başarısız olur.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 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 getPrimaryClip()
aracını ilk kez çağırdığında, bir 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()
ile stilize edilmiş metin.getConfidenceScore()
kullanan 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 itibarıyla kullanımdan kaldırılmıştır. Birkaç özel durum dışında, uygulamanız bu işlemi içeren bir amacı ç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ünür. 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ı kapatmaya devam edebilir:
- 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ı 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 engellendi
Android 12, sistem güvenliğini ve iyi bir kullanıcı deneyimini korumak için uygulamaların, bir yer paylaşımının uygulamayı güvenli olmayan bir şekilde gizlediği dokunma etkinliklerini tüketmesini 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, pencerelerin üzerinden dokunmaya izin veren uygulamaları (örneğin, FLAG_NOT_TOUCHABLE
işaretini kullanarak) etkiler. Aşağıda bazı örnekler verilmiştir, ancak liste bunlarla sınırlı değildir:
SYSTEM_ALERT_WINDOW
izni gerektiren bindirmeler (ör.TYPE_APPLICATION_OVERLAY
ileFLAG_NOT_TOUCHABLE
işaretini kullanan pencereler)FLAG_NOT_TOUCHABLE
işaretini kullanan etkinlik pencereleri.
İstisnalar
Aşağıdaki durumlarda, "geçişli" dokunuşlara 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 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
şeklindedir.Tamamen şeffaf pencereler. Pencere için
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 az veya buna eşit olduğunda sistem, bir dizi sistem uyarı penceresinin yeterince yarı saydam olduğunu 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ü
Kök başlatıcı etkinlikleri artık Geri basıldığında tamamlanmıyor
Android 12, sistemin varsayılan işleme sürecini değiştirir. Geri basma işlevi, görevlerin temelinde yer alan başlatıcı etkinliklerine sahiptir. Önceki sürümlerde ise sistem bu işlemleri Geri düğmesine bastığınızda tamamlıyordu. 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.
Çoğu uygulama için bu değişiklik, Geri'yi kullanarak uygulamanızdan ayrılan kullanıcıların uygulamayı baştan başlatma durumundan tamamen yeniden başlatmak yerine daha hızlı bir şekilde hazır durumda devam ettirebilecekleri anlamına gelmektedir.
Uygulamalarınızı bu değişiklikle test etmenizi öneririz. Uygulamanız şu anda geri gezinmeyi işlemek ve Activity
işlemini tamamlamak için onBackPressed()
değerini geçersiz kılıyorsa uygulamanızı bitirmek yerine super.onBackPressed()
öğesine 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 uygulamalarda daha tutarlı bir gezinme deneyimi sağlar.
Ayrıca, genel olarak onBackPressed()
özelliğini 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 düğmesine müdahale eden herhangi bir bileşen yoksa otomatik olarak uygun sistem davranışını uygular.
Grafikler ve resimler
İyileştirilmiş yenileme hızı geçişi
Android 12'de, setFrameRate()
ile 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. Kesintisiz geçiş, bir veya iki saniye 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()
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ğlanmış bazı ekranlarda sorunsuz olmayan bir geçiş sırasında çağrılır.
Aşağıda, bunu nasıl uygulayabileceğinize dair 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. Hükümler ve koşulların kabul edilmesi gerektiğinde kullanıcıya bir bildirim gösterilir. Hükümler 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ğlarda kimlik doğrulaması yapılırken ağ operatörlerinin Ağ Erişim Tanımlayıcısı'nı (NAI) bir AAA ağında birden fazla proxy üzerinden açık yönlendirme gerçekleştirmek için güncellemesine olanak tanır (daha fazla bilgi için RFC 7542'ye bakın).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 süslenmez ve ağ 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.
Daha fazla bilgiyi İnternet bağlantısı için Kablosuz önerisi API'si başlıklı makalede bulabilirsiniz.
SDK dışı arayüz kısıtlamaları güncellendi
Android 12, Android geliştiricileriyle yapılan ortak çalışmalara ve en son dahili testlere dayalı olarak kısıtlanmış SDK dışı arayüzlerin güncellenmiş listelerini içerir. Mümkün olduğunda, SDK dışı 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 uygulamanızın hedef API düzeyine bağlı olarak bazı SDK olmayan arayüzleri de kullanabilirsiniz. Ancak SDK olmayan bir yöntem veya alan kullanmak her zaman uygulamanızın bozulmasıyla ilgili yüksek risk taşı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üzler kullanıyorsa SDK'nın alternatiflerine geçiş planlamaya başlamanız gerekir. Yine de bazı uygulamaların SDK dışı arayüzleri kullanmak için geçerli kullanım alanları olduğunu biliyoruz. Uygulamanızdaki bir özellik için SDK olmayan bir arayüz kullanmaya alternatif bulamıyorsanız yeni bir herkese açık API istemeniz gerekir.
Android'in bu sürümünde yapılan değişiklikler hakkında daha fazla bilgi edinmek için Android 12'de SDK dışı arayüz kısıtlamalarında yapılan güncellemeler bölümüne bakın. SDK olmayan arayüzler hakkında genel bilgi edinmek için SDK olmayan arayüzlerle ilgili kısıtlamalar bölümünü inceleyin.