Davranış değişiklikleri: tüm uygulamalar

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:

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:

  1. Etkin: Uygulama şu anda kullanılıyor veya çok kısa bir süre önce kullanılmış.
  2. Çalışma grubu: Uygulama normal kullanımdadır.
  3. Sık: Uygulama sıklıkla kullanılır, ancak her gün kullanılmaz.
  4. Nadir: Uygulama sık kullanılmıyor.
  5. 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

İletişim kutusunda biri diğerinin üstünde olmak üzere iki seçenek grubu vardır
Şekil 1. Kullanıcının yaklaşık konum bilgisi vermesine olanak tanıyan sistem izinleri iletişim kutusu.

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.

Hızlı ayar kutuları &quot;Kamera erişimi&quot; ve &quot;Mikrofon erişimi&quot; olarak etiketlenir
Şekil 2. Hızlı Ayarlar'da mikrofon ve kamera açma/kapatma düğmesi.
Sağ üst köşede kamera simgesi ile mikrofon simgesini
         içeren yuvarlak bir dikdörtgen
Şekil 3. Son veri erişimini gösteren mikrofon ve kamera göstergeleri.

İ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'in KeyGenerator 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:

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:

İ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 veya INVISIBLE ş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.

Ç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.