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

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'de çalıştırılan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeniz ve uygun olduğunda, doğru şekilde desteklemek için gerektiği şekilde değiştirmeniz gerekir.

Yalnızca Android 12'yi hedefleyen uygulamaları etkileyen davranış değişikliklerinin listesini de incelemeyi unutmayın.

Kullanıcı deneyimi

Fazla kaydırma efektini uzat

Android 12 ve sonraki sürümleri çalıştıran cihazlarda üzer kaydırma etkinliklerinin görsel davranışı değişir.

Android 11 ve önceki sürümlerde aşırı 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ğiyle genişleyip geri seker, bir kaydırma etkinliğinde hızla geri döner ve geri döner.

Daha fazla bilgi için kaydırma hareketlerini canlandırma rehberine bakın.

Uygulama başlangıç ekranları

Android 11 veya önceki sürümlerde daha önce özel başlangıç ekranı uyguladıysanız Android 12'den itibaren uygulamanızı SplashScreen API'ye taşımanız gerekir. Uygulamanızı taşımazsanız uygulama başlatma deneyiminiz bozulabilir veya istenmeyen bir durum ortaya çıkabilir.

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'den itibaren sistem tüm uygulamalarda her zaman baştan başlatma ve hazır durumda başlatma durumlarında yeni Android sistemi varsayılan başlangıç ekranını uygular. Sistemin varsayılan başlangıç ekranı, varsayılan olarak uygulamanızın başlatıcı simge öğesi ve temanızın windowBackground öğesi (tek renkliyse) kullanılarak oluşturulur.

Daha fazla bilgi için başlangıç ekranları geliştirici kılavuzuna bakın.

Web intent çözümü

Android 12'den (API düzeyi 31) itibaren, genel bir web niyeti, yalnızca uygulamanız söz konusu web amacının yer aldığı belirli bir alan adı için onaylanırsa uygulamanızdaki bir etkinliği çözümler. Uygulamanız alan adı için onaylanmazsa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.

Uygulamalar, aşağıdakilerden birini yaparak bu onayı alabilir:

Uygulamanız web intent'lerini ç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 yoğun içerik modu iyileştirmeleri

Android 12, kullanıcıların kapsamlı modda hareketle gezinme komutlarını gerçekleştirmesini kolaylaştırmak için mevcut davranışları birleştirir. Buna ek olarak, Android 12 yapışkan yoğun içerik modu için geriye dönük uyumluluk davranışı sağlar.

Display#getRealSize ve getRealMetrics: Kullanımdan kaldırma ve kısıtlamalar

Android cihazlar büyük ekranlar, tabletler ve katlanabilir cihazlar gibi birçok farklı form faktöründe kullanılabilir. Uygulamanızın, her cihaza uygun şekilde içerik oluşturmak için ekran veya görüntü boyutunu belirlemesi gerekir. Zaman içinde, Android bu bilgilerin alınması için farklı API'ler sağladı. 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 ediyoruz ve aşağıdaki yöntemleri kullanımdan kaldırıyoruz:

Android 12, uygulama sınırlarını almak için Display API'leri kullanan uygulamaların davranışını azaltmak amacıyla, tamamen yeniden boyutlandırılamayan uygulamalar için API'ler tarafından döndürülen değerleri kısıtlar. Bu durum, bu bilgileri MediaProjection ile kullanan uygulamaları etkileyebilir.

Uygulamalar, pencerelerinin sınırlarını sorgulamak için WindowMetrics API'lerini, geçerli yoğunluğu sorgulamak için 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 etkinliğinizin tamamen yeniden boyutlandırılabilir olduğundan emin olun.

Bir etkinlik, kullanıcı arayüzüyle ilgili herhangi bir çalışmada, özellikle de WindowManager.getCurrentWindowMetrics() veya Jetpack'in WindowMetricsCalculator.computeCurrentWindowMetrics() etkinlik bağlamından WindowMetrics temel alınarak oluşturulmalıdır.

Uygulamanız bir MediaProjection oluşturuyorsa projeksiyon, projektör uygulamasının çalıştığı görüntü bölümünü yakaladığından sınırlar doğru şekilde boyutlandırılmış olmalıdır.

Uygulama tamamen yeniden boyutlandırılabilirse etkinlik bağlamı doğru sınırları döndürür. Örneğin:

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ö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 çalışma haline getirir.

Platform, büyük ekranlarda (sw >= 600 dp) 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 bir etkinliğin çok pencere modunda çalışıp çalışmadığını belirlemek için etkinliğin minWidth ve minHeight özelliklerini kontrol eder. resizeableActivity="false" ise minimum genişlik ve yükseklikten bağımsız olarak uygulamanın çoklu pencere modunda çalışması engellenir.

Daha fazla bilgi edinmek 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, çoklu ekran gibi görüntü modları bu varsayımın zorlaşmasına neden olur.

Android 12'de, belirli bir ekran yönü isteyen ve yeniden boyutlandırılamayan kamera uygulamaları (resizeableActivity="false") otomatik olarak iç içe yerleştirilmiş dikey moda girer. Bu sayede, kamera önizlemesinin uygun yönü ve en boy oranını sağlar. Katlanabilir cihazlarda ve kamera donanım soyutlama katmanına (HAL) sahip diğer cihazlarda kamera sensörü yönünü dengelemek 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 özelliği, cihazın yönü ve katlanmış veya açık durumda olması ne olursa olsun kamera önizlemesinin doğru şekilde gösterilmesini sağlar.

Ön plan hizmeti 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 ön plan hizmet bildirimlerinin gösterilmesini 10 saniye geciktirebilir. Bununla ilgili bazı istisnalar vardır. Bu değişiklik, kısa süreli görevlerin bildirimleri görünmeden önce tamamlanmalarına olanak tanıyor.

Performans

Kısıtlanmış Uygulamayı Beklemeye Alma Paketi

Android 11 (API düzeyi 30), kısıtlanmış paketi Uygulama Bekleme Paketi olarak kullanıma sunmuştur. Bu paket, Android 12'den itibaren varsayılan olarak etkindir. Kısıtlanmış paket, tüm paketler arasında en düşük önceliğe (ve en yüksek kısıtlamalara) sahiptir. Öncelik sırasına göre yüksekten düşüğe doğru gruplar şunlardır:

  1. Etkin: Uygulama şu anda kullanılıyor veya kısa süre önce kullanıldı.
  2. Çalışma grubu: Uygulama normal olarak kullanılıyor.
  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ıtlanmış: Uygulama çok fazla sistem kaynağı tüketiyor veya istenmeyen davranış sergileyebilir.

Sistem, uygulamanızı kısıtlanmış pakete ekleyip eklemeyeceğ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 sistem kaynaklarını daha sorumlu bir şekilde kullanıyorsa kısıtlanmış pakete eklenme olasılığı azalır. Ayrıca, kullanıcı doğrudan uygulamanızla etkileşimde bulunursa sistem uygulamanızı daha az kısıtlamalı bir pakete yerleştirir.

Uygulamanızın kısıtlanmış pakette olup olmadığını kontrol edin

Sistemin uygulamanızı kısıtlanmış pakete yerleştirip yerleştirmediğini kontrol etmek için getAppStandbyBucket() çağrısı yapı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 davrandığını test etmek için uygulamanızı bu pakete manuel olarak 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

İ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 sadece yaklaşık konum bilgilerine erişmesini isteyebilir.

Uygulamanız ACCESS_FINE_LOCATION çalışma zamanı izni isterse kullanıcının, uygulamanıza yaklaşık konum erişimi verdiği durumları ele almak 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 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 bir sürümü ç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ştirmesine ve 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 geçiş yapılabilir seçeneklere erişebilirler.

Bu geçişler ve uygulamanızın CAMERA ile RECORD_AUDIO izinleriyle ilgili en iyi uygulamalara uyup uymadığını nasıl kontrol edeceğiniz hakkında daha fazla bilgi edinin.

Mikrofon ve kamera göstergeleri

Android 12 veya sonraki sürümleri çalıştıran cihazlarda, bir uygulama 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 uyup uymadığı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. Mikrofon ve kamera Hızlı Ayarlar'da açılıp kapatılır.
Sağ üst köşede, kamera simgesi ve mikrofon simgesi 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 bir sürümü 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 desteği sonlandırılan birçok BouncyCastle uygulamasını kaldırır. Sistem bunun yerine bu algoritmaların Conscrypt uygulamalarını kullanır.

Aşağıdaki durumlardan 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 parametreler üzerinde ek doğrulama gerçekleştirir. Örneğin, Conscrypt yalnızca 128, 192 ve 256 bit anahtarları desteklediğinden uygulamanızın 64 bit AES anahtarı oluşturmasına izin vermez.

    BouncyCastle, geçersiz boyutlarda anahtarların oluşturulmasına izin verir ancak bu anahtarlar Cipher ile kullanılırsa daha sonra başarısız olur. Şifreleme daha önce 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 12 baytlık başlatma işlemi gerekir.

Pano erişimi bildirimleri

Android 12 ve sonraki sürümlerde bir uygulama, farklı bir uygulamadan ilk kez klip verilerine erişmek için getPrimaryClip() komutunu çağırdığında kullanıcıya bu pano erişimi hakkında bir bilgilendirme mesajı gönderilir.

Bildirim mesajının içindeki metin şu biçimdedir: APP pasted from your clipboard.

Klip açıklamasındaki metin hakkında bilgi

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 kullanıcı kontrolünü iyileştirmek için ACTION_CLOSE_SYSTEM_DIALOGS intent 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 amaç çağırmaya çalıştığında sistem, uygulamanızın hedef SDK sürümüne bağlı olarak aşağıdakilerden birini yapar:

  • Uygulamanız Android 12 veya sonraki 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 şu 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 da bir uygulama, Android 12 veya sonraki sürümlerde sistem iletişim kutularını kapatmaya devam edebilir:

  • Uygulamanız bir araç testi çalıştırıyordur.
  • Uygulamanız, Android 11 veya önceki bir sürümü hedefliyor ve bildirim çekmecesinin üzerinde 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şimde bulunmuş ve uygulamanız bu kullanıcı işlemine yanıt olarak bir hizmeti veya yayın alıcıyı işliyordur.

  • Uygulamanız Android 11 veya önceki bir sürümü 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, yer paylaşımının uygulamayı güvenli olmayan bir şekilde engellediğ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, dokunmaların pencerelerinden geçmesine izin vermeyi (ör. FLAG_NOT_TOUCHABLE işaretini kullanarak) uygulamaları etkileyecek. Aşağıda bazı örnekler verilmiştir, ancak bunlarla sınırlı değildir:

İstisnalar

Aşağıdaki durumlarda, "geçiş" yoluyla yapılan dokunmalara izin verilir:

  • Uygulamanızdaki etkileşimler. Uygulamanızda yer paylaşımı gösterilir ve yer paylaşımı yalnızca kullanıcı uygulamanızla etkileşimde bulunurken görünür.
  • Güvenilen pencereler. Bu pencereler aşağıdakileri kapsar (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. alpha özelliği, pencere için 0,0'dır.

  • Sistem uyarı pencereleri yeterince şeffaf. Birleşik opaklık, dokunmalar için sistemin maksimum gizleme opaklığına eşit veya bundan az olduğunda sistem bir grup sistem uyarı penceresini yeterince yarı saydam olarak kabul eder. Android 12'de bu maksimum opaklık varsayılan olarak 0, 8'dir.

Güvenilir olmayan bir dokunmanın engellendiğini 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 etme

Android 12 veya sonraki sürümleri çalıştıran cihazlarda güvenilmeyen dokunmalar varsayılan olarak engellenir. Güvenilmeyen dokunmalara izin vermek için aşağıdaki ADB komutunu bir terminal penceresinde ç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 tuşuna basıldığında kök başlatıcı etkinlikleri artık bitmiyor

Android 12, sistemin varsayılan işleme şeklini değiştirir. Başlatıcı işlemlerinin temelinde, Önceki sürümlerde, sistem bu işlemleri Geri basmada bitiriyordu. Android 12'de sistem artık etkinliği bitirmek yerine etkinliği ve görevini arka plana taşıyor. Bu yeni davranış, Ana Sayfa düğmesini veya hareketi kullanarak bir uygulamadan çıkarken mevcut davranışla eşleşir.

Çoğu uygulama için bu değişiklik, uygulamanızın dışına çıkmak için Geri'yi kullanan kullanıcıların, uygulamayı soğuk moddan tamamen yeniden başlatmak yerine sıcak durumdan daha hızlı bir şekilde devam ettirebilecekleri anlamına gelir.

Uygulamalarınızı bu değişikliği test ederek test etmenizi öneririz. Uygulamanız şu anda geri gezinmeyi işlemek ve Activity işlemini tamamlamak için onBackPressed() kodunu geçersiz kılıyorsa uygulamanızı bitirmek yerine super.onBackPressed() çağrısı yapacak şekilde güncelleyin. super.onBackPressed() işlevinin çağrılması, uygun olduğunda etkinliği ve görevini arka plana taşır ve kullanıcılara uygulamalarda daha tutarlı bir gezinme deneyimi sunar.

Ayrıca genel olarak, onBackPressed() değerini geçersiz kılmak yerine özel geri gezinme sağlamak için AndroidX Activity API'lerinin kullanılmasını öneririz. Sistemin Geri basmasına müdahale eden bileşen yoksa AndroidX Activity API'leri otomatik olarak uygun sistem davranışına uyar.

Grafikler ve resimler

İyileştirilmiş yenileme hızı geçişi

Android 12'de setFrameRate() kullanarak yenileme hızı değişiklikleri, ekranın yeni yenileme hızına sorunsuz geçişi destekleyip desteklemediğinden bağımsız olarak gerçekleşebilir. Siyah ekran gibi bir saniye boyunca görsel kesinti içermeyen geçiş ise sorunsuz geçiştir. Daha önce, ekran sorunsuz bir geçişi desteklemiyorsa genellikle setFrameRate() çağrıldıktan sonra aynı yenileme hızını kullanmaya devam ediyordu. getAlternativeRefreshRates() çağrısı yaparak, yeni yenilemeye geçişin sorunsuz olup olmayacağını önceden belirleyebilirsiniz. Genel olarak onDisplayChanged() geri çağırması, yenileme hızı anahtarı tamamlandıktan sonra çağrılır. Ancak harici olarak bağlı bazı ekranlarda, kesintisiz 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

Aşağıdaki API'ler Android 12'ye 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ı 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. Ş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. Alternatif veya eski bir ağ önerilmelidir.
  • isDecoratedIdentitySupported(): Ön ek dekorasyonu olan ağlarda kimlik doğrulaması yapılırken ağ operatörleri, ağ erişim tanımlayıcısını (NAI) güncelleyerek bir AAA ağının içindeki birden fazla proxy aracılığıyla açık yönlendirme gerçekleştirmek için ağ erişim tanımlayıcısını (NAI) güncelleyebilir (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. Ayarlanmış bir 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 etiketlenmez 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 açıklar.

Daha fazla bilgi için İnternet bağlantısı için kablosuz bağlantı önerisi API'si bölümüne bakın.

SDK dışı arayüz kısıtlamaları güncellendi

Android 12, Android geliştiricileriyle yapılan ortak çalışmaya ve en son dahili testlere dayanarak 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ılabildiğinden emin oluruz.

Uygulamanız Android 12'yi hedeflemiyorsa bu değişikliklerden bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK olmayan arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilirsiniz. Ancak SDK olmayan herhangi bir yöntem veya alan kullanmak her zaman uygulamanızın bozulma riski taşır.

Uygulamanızın SDK olmayan arayüz kullanıp kullanmadığından emin değilseniz öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK olmayan arayüzleri kullanıyorsa SDK alternatiflerine geçiş planlamaya başlamanız gerekir. Bununla birlikte, bazı uygulamaların SDK dışı arayüzler için geçerli kullanım alanları olduğunun farkındayız. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmanın alternatifini bulamıyorsanız yeni bir herkese açık API isteğinde bulunmanız gerekir.

Android'in bu sürümündeki değişiklikler hakkında daha fazla bilgi edinmek için Android 12'deki SDK olmayan arayüz kısıtlamalarıyla ilgili güncellemeler bölümüne bakın. SDK olmayan arayüzler hakkında genel olarak daha fazla bilgi edinmek için SDK dışı arayüzlerdeki kısıtlamalar bölümüne bakın.