Android 12 platformu, uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion değerinden bağımsız olarak Android 12'de çalışan 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
Esnemeli kaydırma efekti
Android 12 ve sonraki sürümleri çalıştıran cihazlarda, kaydırma sonu etkinliklerinin görsel davranışı değişir.
Android 11 ve önceki sürümlerde, kaydırma sonu etkinliği görsel öğelerin parlamasına neden olur. Android 12 ve sonraki sürümlerde ise görsel öğeler, sürükleme etkinliğinde esneyip geri döner, hızlı kaydırma etkinliğinde ise fırlatılıp geri döner.
Daha fazla bilgi için kaydırma hareketlerini animasyonlu hale getirme kılavuzuna bakın.
Uygulama başlangıç ekranları
Daha önce Android 11 veya daha eski bir sürümde özel bir başlangıç ekranı uyguladıysanız uygulamanızın Android 12'den itibaren doğru şekilde görüntülenmesi için uygulamanızı SplashScreen API'sine taşımanız gerekir. Uygulamanızı taşımamanız, uygulama başlatma deneyiminin kötüleşmesine 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 soğuk ve ılık başlatmalarda her zaman yeni Android sistemi 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 (tek renkliyse) kullanılarak oluşturulur.
Daha fazla bilgi için başlangıç ekranları geliştirici kılavuzuna bakın.
Web intent resolution (Web intent çözünürlüğü)
Android 12'den (API düzeyi 31) itibaren, genel bir web intent isteği yalnızca uygulamanız söz konusu web intent isteğinde yer alan alan adı için onaylanmışsa uygulamanızdaki bir etkinliğe yönlendirilir. Uygulamanız alan için onaylanmamışsa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Uygulamalar bu onayı aşağıdaki yöntemlerden biriyle 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
BROWSABLEkategorisini 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 yoğun içerik modu iyileştirmeleri
Android 12, kullanıcıların yoğun içerik modundayken hareketle gezinme komutlarını gerçekleştirmesini kolaylaştırmak için mevcut davranışı birleştirir. Ayrıca Android 12, yapışkan yoğun içerik modu için geriye dönük uyumluluk davranışı sağlar.
Display#getRealSize ve getRealMetrics: desteğin sonlandırılması ve kısıtlamalar
Android cihazlar; büyük ekranlar, tabletler ve katlanabilir cihazlar gibi birçok farklı form faktöründe sunulur. İçeriği her cihaz için uygun şekilde oluşturmak amacıyla uygulamanızın ekran veya görüntü boyutunu belirlemesi gerekir. Android, zaman içinde bu bilgileri almak için farklı API'ler sunmuştur. Android 11'de WindowMetrics API'sini kullanıma sunduk ve şu yöntemleri kullanımdan kaldırdık:
Android 12'de WindowMetrics kullanmanızı önermeye devam ediyoruz ve şu yöntemleri kullanımdan kaldırıyoruz:
Android 12, uygulamanın sınırlarını almak için Görüntüleme 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, MediaProjection ile bu bilgileri 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'i kullanma örnekleri
Öncelikle uygulamanızın etkinliklerinin tamamen yeniden boyutlandırılabilir olduğundan emin olun.
Bir etkinlik, kullanıcı arayüzüyle ilgili tüm işler için etkinlik bağlamından WindowMetrics kullanmalıdır. Özellikle
WindowManager.getCurrentWindowMetrics()
veya Jetpack'in
WindowMetricsCalculator.computeCurrentWindowMetrics().
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 boyutu doğru ayarlanmalıdır.
Uygulama tamamen yeniden boyutlandırılabiliyorsa etkinlik bağlamı, doğru sınırları şu şekilde 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 sorgulama yapmalı ve WindowManager.getMaximumWindowMetrics() veya Jetpack yöntemi 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 tüm uygulamaları çoklu pencere modunda destekler. resizeableActivity="false" ise uygulama, ekran boyutlarına uyum sağlamak için gerektiğinde uyumluluk moduna alınır.
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 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 ekranlı form faktörleri ve çoklu pencere ile çoklu ekran gibi görüntüleme modları bu varsayımı zorlaştırır.
Android 12'de, belirli bir ekran yönü isteyen ve yeniden boyutlandırılamayan (resizeableActivity="false") kamera uygulamaları otomatik olarak iç içe yerleştirilmiş portre moduna girer. Bu mod, kamera önizlemesinin doğru yön ve en-boy oranına sahip olmasını sağlar. Katlanabilir cihazlarda ve kamera donanım soyutlama katmanına (HAL) sahip diğer cihazlarda, kamera sensörü 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, cihazın yönünden ve katlanmış veya katlanmamış durumundan bağımsız olarak kamera önizlemesinin doğru şekilde sunulmasını sağlar.
Ön plan hizmeti bildirimleri için kullanıcı deneyimi gecikmesi
Kısa süreli ön plan hizmetleri için kolaylaştırılmış bir deneyim sunmak amacıyla Android 12 veya sonraki sürümleri çalıştıran cihazlar, ön plan hizmet bildirimlerinin gösterilmesini 10 saniye geciktirebilir. Bu konuda birkaç istisna vardır. 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), Uygulamayı Beklemeye Alma Grubu olarak kısıtlanmış grubu kullanıma sundu. Bu grup, Android 12'den itibaren varsayılan olarak etkindir. Kısıtlanmış grup, tüm gruplar arasında en düşük önceliğe (ve en yüksek kısıtlamalara) sahiptir. Yüksekten düşüğe doğru öncelik sırasına göre gruplar şunlardır:
- Etkin: Uygulama şu anda kullanılıyor veya çok yakın zamanda kullanıldı.
- Çalışma grubu: Uygulama düzenli olarak kullanılıyordur.
- 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üketiyor veya istenmeyen davranışlar sergiliyor olabilir.
Sistem, uygulamanızı kısıtlanmış gruba yerleştirip yerleştirmeyeceğ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ırsa kısıtlanmış gruba yerleştirilme olasılığı daha düşük olur. Ayrıca, kullanıcı uygulamanızla doğrudan 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ış gruba yerleştirip yerleştirmediğini kontrol etmek için getAppStandbyBucket() yöntemini çağırı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ış gruba yerleştirdiğinde uygulamanızın nasıl davrandığını test etmek için uygulamanızı manuel olarak bu gruba 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
Ön plan konumu ve Pil Tasarrufu
Android 12'den itibaren, ön plan konumu (ön plan hizmetinden gelenler dahil), Pil Tasarrufu etkinken ve ekran kapalıyken bile gönderilmeye devam edebilir.
Daha önce Pil Tasarrufu modu, ekran kapalıyken konum güncellemelerini durduruyordu. Bu değişiklik, kullanıcıların pil ömrünü uzatır ve geliştiricilerin, konum güncellemelerini sağlamak için kullanıcılardan Pil Tasarrufu'nu devre dışı bırakmalarını istemelerine gerek kalmaz.
Ön plan hizmeti üzerinden konum isteyen uygulamalar aşağıdaki adımları uygulamalıdır:
- Pil Tasarrufu etkinken cihazın konum özelliklerinin nasıl davrandığını kontrol etmek için
getLocationPowerSaverMode()öğesini çağırın. - Bu yöntem
LOCATION_MODE_FOREGROUND_ONLYdeğerini döndürürse uygulamanız, Pil Tasarrufu açık ve ekran kapalıyken ön planda veya ön plan hizmeti çalıştırırken konum güncellemeleri almaya devam eder.
Güvenlik ve gizlilik
Yaklaşık konum
Android 12 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanıcılar, uygulamanızın yalnızca yaklaşık konum bilgilerine erişmesini isteyebilir.
Uygulamanız çalışma zamanında istenen ACCESS_FINE_LOCATION iznini istiyorsa kullanıcının uygulamanıza yaklaşık konum erişimi verdiği durumu işlemek için ACCESS_COARSE_LOCATION iznini de istemeniz gerekir. Her iki izni de tek bir çalışma zamanı isteğine eklemeniz gerekir.
Sistem izinleri iletişim kutusunda, Şekil 1'de gösterildiği gibi kullanıcı için aşağıdaki seçenekler bulunur:
- 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ümlerin yüklü olduğu desteklenen cihazlarda kullanıcılar, tek bir açma/kapatma seçeneğine basarak cihazdaki tüm uygulamalar için kamera ve mikrofon erişimini etkinleştirebilir ve devre dışı bırakabilir. Kullanıcılar, açma/kapatma seçeneklerine Şekil 1'de gösterildiği gibi Hızlı Ayarlar'dan veya sistem ayarlarındaki Gizlilik ekranından 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ümlerin yüklü olduğu cihazlarda bir uygulama mikrofona ya da 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ümlerin yüklü olduğu 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 uygulamalara yönelik 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. 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ızda 512 bit anahtar boyutları kullanılıyor. Conscrypt bu anahtar boyutunu desteklemiyor. Gerekirse uygulamanızın kriptografi mantığını farklı anahtar boyutları kullanacak şekilde güncelleyin.
Uygulamanızda
KeyGeneratorile geçersiz anahtar boyutları kullanılıyor. Conscrypt'inKeyGeneratoruygulaması, BouncyCastle'a kıyasla anahtar parametrelerde ek doğrulama gerçekleştirir. Örneğin, Conscrypt, uygulamanızın 64 bit AES anahtarı oluşturmasına izin vermez. Bunun nedeni, AES'in yalnızca 128, 192 ve 256 bit anahtarları desteklemesidir.BouncyCastle, geçersiz boyutlarda anahtarların oluşturulmasına izin verir ancak bu anahtarlar
Cipherile kullanılırsa daha sonra başarısız olur. Conscrypt daha erken başarısız olur.Galois/Counter Mode (GCM) şifrelerinizi 12 bayt dışında bir boyut kullanarak başlatıyorsunuz. Conscrypt'in
GcmParameterSpecuygulaması, NIST'in önerdiği 12 baytlık bir başlatma gerektirir.
Pano erişim bildirimleri
Android 12 ve sonraki sürümlerde, bir uygulama farklı bir uygulamadaki klip verilerine erişmek için ilk kez getPrimaryClip() yöntemini çağırdığında kullanıcıya bu pano erişimi hakkında bilgi veren bir pop-up mesaj gösterilir.
Kısa süreli mesajın içindeki metin şu biçimdedir:
APP pasted from your clipboard.
Klip açıklamasındaki metinle ilgili bilgiler
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
Uygulamalar ve sistemle etkileşim kurarken kullanıcı kontrolünü iyileştirmek için ACTION_CLOSE_SYSTEM_DIALOGS intent 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 intent'i ç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 sürümleri hedefliyorsa
SecurityExceptionhatası oluşur. Uygulamanız Android 11 (API düzeyi 30) veya daha eski bir sürümü hedefliyorsa intent yürütülmez ve Logcat'te aşağıdaki mesaj gösterilir:
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ızda enstrümantasyon testi çalıştırılıyor.
Uygulamanız Android 11 veya daha eski bir sürümü hedefliyor ve bildirim çekmecesinin üstünde bir pencere gösteriyor.
Uygulamanız Android 11 veya daha eski sürümleri hedefliyor. Ayrıca kullanıcı, muhtemelen bildirimin işlem düğmelerini kullanarak bir bildirimle etkileşim kurmuştur 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 hizmeti içeriyor. Uygulamanız Android 12'yi hedefliyorsa ve bildirim çubuğunu kapatmak istiyorsa bunun yerine
GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADEeriş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, bir 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, dokunmaların pencerelerinden geçmesine izin veren uygulamaları etkiler. Örneğin, FLAG_NOT_TOUCHABLE işaretini kullanan uygulamalar bu kapsamdadır. Aşağıda bazı örnekler verilmiştir, ancak liste bunlarla sınırlı değildir:
SYSTEM_ALERT_WINDOWizni gerektiren,TYPE_APPLICATION_OVERLAYkullanan veFLAG_NOT_TOUCHABLEişaretini kullanan pencereler gibi yer paylaşımları.FLAG_NOT_TOUCHABLEiş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ü
GONEveyaINVISIBLE.Tamamen şeffaf pencereler. Pencere için
alphaözelliği 0,0'dır.Yeterince yarı saydam sistem uyarısı pencereleri. Sistem, bir sistem uyarı penceresi grubunun yeterince yarı saydam olduğunu kabul etmek için birleşik opaklığın, sistemin dokunmalar için maksimum karartma opaklığından daha az veya buna eşit olmasını bekler. Android 12'de bu maksimum opaklık varsayılan olarak 0, 8'dir.
Güvenilmeyen bir dokunma engellendiğinde 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 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ılan ayarlara (güvenilmeyen dokunmalar engellenir) döndürmek için 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örevlerinin kökünde bulunan başlatıcı etkinliklerinde sistemin geri tuşuna basma işleminin varsayılan işleyişini değiştirir. Önceki sürümlerde sistem, geri düğmesine basıldığında bu etkinlikleri sonlandırıyordu. Android 12'de sistem artık etkinliği sonlandırmak yerine etkinliği ve görevini arka plana taşır. Yeni davranış, ana sayfa düğmesini veya hareketini kullanarak bir uygulamadan çıkarken sergilenen mevcut davranışla aynıdır.
Çoğu uygulamada bu değişiklik, uygulamanızdan çıkmak için Geri düğmesini kullanan kullanıcıların, uygulamayı soğuk durumdan tamamen yeniden başlatmak zorunda kalmadan 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 öğesini tamamlamak için onBackPressed() yöntemini geçersiz kılıyorsa uygulamanızı, tamamlamak yerine super.onBackPressed() yöntemini çağıracak şekilde güncelleyin. super.onBackPressed() yöntemini çağırmak, 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, onBackPressed() yöntemini geçersiz kılmak yerine özel geri gezinme sağlamak için genellikle AndroidX Activity API'lerini kullanmanızı öneririz. AndroidX Activity API'leri, sistemin geri basma işlemini engelleyen bileşen yoksa otomatik olarak uygun sistem davranışına uyar.
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ğine bakılmaksızın gerçekleşebilir. Sorunsuz geçiş, bir veya iki saniye boyunca siyah ekran gibi görsel kesintilerin olmadığı bir 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 yenileme hızına geçişin sorunsuz olup olmayacağını önceden belirleyebilirsiniz.
Genellikle geri çağırma 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:
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ğıyla değiştirmesine olanak tanıyan 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şullar'a tabi 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 bu ağa bağlanamaz ve alternatif veya eski bir ağ önerilmesi gerekir.isDecoratedIdentitySupported(): Önek dekorasyonu olan ağlarda kimlik doğrulaması yapılırken dekore edilmiş kimlik öneki, ağ operatörlerinin Ağ Erişim Tanımlayıcısı'nı (NAI) güncelleyerek bir AAA ağındaki birden fazla proxy üzerinden açık yönlendirme yapmasına 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, 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ğ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 ağ önerisi API'si başlıklı makaleyi inceleyin.
SDK olmayan arayüz kısıtlamaları güncellendi
Android 12, Android geliştiricileriyle yapılan ortak çalışmalar ve en son dahili testlere dayalı olarak güncellenmiş kısıtlanmış SDK dışı arayüz listeleri içerir. SDK olmayan arayüzleri kısıtlamadan önce mümkün olduğunca herkese açık alternatiflerin mevcut olduğundan 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ışı bir yöntem veya alan kullanmak her zaman uygulamanızın bozulmasıyla ilgili yüksek risk taşır.
Uygulamanızın SDK dışı arayüzler kullanıp kullanmadığından emin değilseniz uygulamanızı test ederek öğrenebilirsiniz. Uygulamanız SDK olmayan arayüzleri kullanıyorsa SDK alternatiflerine geçişi planlamaya başlamanız gerekir. Bununla birlikte, 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 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 olmayan arayüzlerle ilgili kısıtlamalarda yapılan güncellemeler başlıklı makaleyi inceleyin. SDK olmayan arayüzler hakkında genel bilgi edinmek için SDK olmayan arayüzlerde kısıtlamalar başlıklı makaleyi inceleyin.