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 bağımsız olarak Android 12'de çalıştırıldığında tüm uygulamalar için geçerlidir. Uygulamanızı test etmeli ve uygun olduğu durumlarda bunları düzgün şekilde desteklemek için gerektiği gibi değiştirmelisiniz.

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

Kullanıcı deneyimi

Kaydırma sonu efektini uzatma

Android 12 ve sonraki sürümlerin yüklü olduğu cihazlarda, aşırı 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 ise görsel öğeler sürükleme etkinliğinde uzayıp geri seker, hızlı kaydırma etkinliğinde ise fırlayıp geri seker.

Daha fazla bilgi için kaydırma hareketlerini animasyonla gösterme rehberine bakın.

Uygulama başlangıç ekranları

Daha önce Android 11 veya önceki 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ülenmesini sağlamak için SplashScreen API'ye taşımanız gerekir. Uygulamanızı taşımamanız, uygulama lansman deneyiminin kalitesinin düşmesine veya istenmeyen bir şekilde gerçekleşmesine neden olur.

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 Android sistem varsayılan başlangıç ekranını her zaman soğuk ve sıcak başlatmalarda uygular. Varsayılan olarak bu sistem varsayılan karşılama ekranı, uygulamanızın başlatıcı simgesi öğesi ve temanızın windowBackground kullanılarak oluşturulur (tek renkliyse).

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

Web intent resolution

Android 12'den (API düzeyi 31) itibaren, genel bir web amaçlı işlemi yalnızca uygulamanız söz konusu web amaçlı işlemde yer alan belirli alan için onaylanmışsa uygulamanızdaki bir etkinlik çözer. Uygulamanız alan için onaylanmamışsa web amaçlı intent bunun yerine kullanıcının varsayılan tarayıcı uygulamasına yönlendirilir.

Uygulamalar, aşağıdaki yöntemlerden birini kullanarak bu onayı alabilir:

Uygulamanız web amaçlarını çağırıyorsa kullanıcıdan işlemi onaylamasını isteyen bir istem veya iletişim kutusu eklemeyi düşünebilirsiniz.

Hareketle gezinme için tam ekran modunda iyileştirmeler

Android 12, mevcut davranışı birleştirerek kullanıcıların tam ekran modundayken hareketle gezinme komutlarını gerçekleştirmesini kolaylaştırır. Ayrıca Android 12, yapışkan tam ekran 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ğin her cihazda uygun şekilde oluşturulması için 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'yi kullanıma sunduk ve şu yöntemlerin desteğini sonlandırdık:

Android 12'de WindowMetrics kullanmanızı önermeye devam ediyor ve şu yöntemlerin desteğini sonlandırıyoruz:

Android 12, uygulamanın 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'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 ve geçerli yoğunluğu sorgulamak için Configuration.densityDpi kullanmalıdır.

Android'in eski sürümleriyle daha geniş bir 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'in nasıl kullanılacağına dair örnekler

Öncelikle, uygulamanızın etkinliklerinin tamamen yeniden boyutlandırılabilir olduğundan emin olun.

Bir etkinlik, özellikle WindowManager.getCurrentWindowMetrics() veya Jetpack'in WindowMetricsCalculator.computeCurrentWindowMetrics() olmak üzere kullanıcı arayüzüyle ilgili tüm çalışmalar için etkinlik bağlamındaki WindowMetrics öğesine dayanmalıdır.

Uygulamanız bir MediaProjection oluşturuyorsa yansıtma, projektör uygulamasının çalıştığı ekran bölümünü yakaladığından sınırların doğru şekilde boyutlandırılması gerekir.

Uygulama tamamen yeniden boyutlandırılabilirse 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 WindowContextörneğinden sorgu oluşturması ve WindowManager.getMaximumWindowMetrics() veya Jetpack yöntemi WindowMetricsCalculator.computeMaximumWindowMetrics() kullanılarak etkinlik sınırlarının WindowMetrics değerini alması gerekir.

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

Büyük ekranlarda (sw >= 600 dp) platform, uygulama yapılandırmasından bağımsız olarak çok pencereli moddaki tüm uygulamaları 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 pencereli modda çalışıp çalışamayacağını belirlemek için minWidth ve minHeight özelliklerini kontrol eder. Eğer resizeableActivity="false", uygulamanın minimum genişlik ve yükseklik değerlerinden 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 çok pencereli ve çok ekranlı gibi ekran 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ı, kamera önizlemesinin doğru yönünü ve en-boy oranını sağlamak için otomatik olarak yerleştirilmiş dikey moda girer. Katlanabilir cihazlarda ve kamera donanımı soyutlama katmanı (HAL) olan 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ıyla eşleşecek şekilde kırpılır. Kırpma ve ek döndürme, cihazın yönü ile katlanmış veya açılmış durumundan bağımsız olarak kamera önizlemesinin düzgün şekilde gösterilmesini sağlar.

Ön plan hizmeti bildirimlerinde kullanıcı deneyimi gecikmesi

Kısa süreli ön plan hizmetleri için sorunsuz bir deneyim sağlamak amacıyla Android 12 veya sonraki sürümleri çalıştıran cihazlar, birkaç istisna dışında ön plan hizmeti bildirimlerinin gösterilmesini 10 saniye geciktirebilir. 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), restricted bucket adlı bir uygulama bekleme modu grubu 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) gruplar şunlardır:

  1. Etkin: Uygulama şu anda kullanılıyor veya kısa süre önce kullanılmış.
  2. Çalışma kümesi: Uygulama düzenli olarak kullanılıyor.
  3. Sık: Uygulama her gün olmasa da sık sık kullanılır.
  4. Nadiren: Uygulama sık kullanılmıyor.
  5. Kısıtlanmış: Uygulama çok fazla sistem kaynağı tüketiyor veya istenmeyen davranışlar sergiliyor olabilir.

Sistem, uygulamanızı kısıtlanmış pakete 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ıyorsa kısıtlanmış pakete yerleştirilme 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ış grupta olup olmadığını kontrol edin

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önüş 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ı manuel olarak bu pakete taşıyabilirsiniz. Bunu yapmak için bir terminal penceresinde aşağıdaki komutu çalıştırın:

adb shell am set-standby-bucket PACKAGE_NAME restricted

Ön planda konum ve pil tasarrufu

Android 12'den itibaren, ekran kapalıyken bile pil tasarrufu etkinken ön plan konumu (ön plan hizmetinden alınan konum dahil) sağlanmaya devam edebilir.

Daha önce, ekran kapalıyken Pil Tasarrufu modu konum güncellemelerini durduruyordu. Bu değişiklik, kullanıcılar için daha iyi bir pil ömrü sağlar ve geliştiricilerin konum teslimatlarını sağlamak için kullanıcılardan Pil Tasarrufu'nu devre dışı bırakmalarını istememeleri anlamına gelir.

Ön plan hizmeti aracılığıyla konum bilgisi isteyen uygulamalar aşağıdaki adımları uygulamalıdır:

  1. Pil Tasarrufu etkin olduğunda cihazın konum özelliklerinin nasıl çalıştığını kontrol etmek için getLocationPowerSaverMode() numaralı telefonu arayın.
  2. Bu değer LOCATION_MODE_FOREGROUND_ONLY olarak döndürülürse uygulamanız, ön plandayken veya pil tasarrufu açıkken ve ekran kapalıyken ön plan hizmeti çalıştırırken konum güncellemeleri almaya devam eder.

Güvenlik ve gizlilik

Yaklaşık konum

İletişim kutusunda biri diğerinin üzerinde olmak üzere iki seçenek grubu bulunur.
1. şekil. Kullanıcının yaklaşık konum bilgilerini vermesine olanak tanıyan sistem izinleri iletişim kutusu.

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 ACCESS_FINE_LOCATION çalışma zamanı 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 istemelisiniz. Her iki izni de tek bir çalışma zamanı isteğine dahil etmelisiniz.

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 veya devre dışı bırakabilir. Kullanıcılar, Şekil 1'de gösterildiği gibi, açılıp kapatılabilen seçeneklere 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ı kontrol etme 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 ile RECORD_AUDIO izinleriyle ilgili en iyi uygulamalara uyup uymadığını kontrol etme 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üğmeleri.
Sağ üst köşede, kamera simgesi ve mikrofon simgesi içeren yuvarlak bir dikdörtgen
3.şekil 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'i (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, daha önce desteği sonlandırılan kriptografik algoritmaların (tüm AES algoritmaları dahil) birçok BouncyCastle uygulamasını kaldırır. Bunun yerine sistem, bu algoritmaların Conscrypt uygulamalarını kullanır.

Aşağıdaki koşullardan 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 KeyGenerator ile geçersiz anahtar boyutları kullanılıyor. Conscrypt'in KeyGenerator uygulaması, BouncyCastle'a kıyasla önemli parametrelerde ek doğrulama gerçekleştirir. Örneğin, Conscrypt, AES yalnızca 128, 192 ve 256 bit anahtarları desteklediği için uygulamanızın 64 bit AES anahtarı oluşturmasına izin vermez.

    BouncyCastle, geçersiz boyutlardaki anahtarların oluşturulmasına izin verir ancak bu anahtarlar Cipher ile kullanılırsa daha sonra başarısız olur. Conscrypt daha önce başarısız olur.

  • Galois/Counter Mode (GCM) şifrelerinizi 12 bayttan farklı bir boyutta başlatıyorsunuz. Conscrypt'in GcmParameterSpec uygulaması için NIST'in önerdiği 12 baytlık bir başlatma işlemi gerekir.

Pano erişimi bildirimleri

Android 12 ve sonraki sürümlerde bir uygulama, getPrimaryClip()'ı çağırarak farklı bir uygulamadaki pano verilerine ilk kez eriştiğinde, kullanıcı bu pano erişimi hakkında bir kısa mesajla bilgilendirilir.

Bildirim mesajının içindeki metin aşağıdaki biçimi içeriyor: APP pasted from your clipboard.

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

Android 12 ve sonraki sürümlerde getPrimaryClipDescription() 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 Android 12'den itibaren ACTION_CLOSE_SYSTEM_DIALOGS amaç işlemi kullanımdan kaldırıldı. 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 sürümleri hedefliyorsa SecurityException oluşur.
  • Uygulamanız Android 11'i (API düzeyi 30) veya daha düşük bir sürümü hedefliyorsa amaç 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, uygulamalar Android 12 veya sonraki sürümlerde sistem iletişim kutularını kapatmaya devam edebilir:

  • Uygulamanız enstrümantasyon testi çalıştırıyor.
  • Uygulamanız Android 11 veya daha eski 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ı bir bildirimle etkileşimde bulunmuş (muhtemelen bildirimin işlem düğmelerini kullanarak) ve uygulamanız bu kullanıcı işlemine yanıt olarak bir hizmeti veya yayın alıcısını işliyor.

  • 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_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, bir yerleşimin 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 dokunuşları engeller.

Bu durumdan etkilenen uygulamalar

Bu değişiklik, dokunmaların pencerelerinden geçmesine izin vermeyi seçen uygulamaları (ör. FLAG_NOT_TOUCHABLE işaretini kullanarak) etkiler. Aşağıda bazı örnekler verilmiştir, ancak liste bunlarla sınırlı değildir:

İstisnalar

Aşağıdaki durumlarda "geçiş" dokunuşları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:

    değildir.
  • Görünmez pencereler. Pencerenin kök görünümü GONE veya INVISIBLE olmalıdır.

  • Tamamen şeffaf pencereler. Pencere için alpha özelliği 0,0'dır.

  • Yeterince yarı saydam sistem uyarı pencereleri. Sistem, bir dizi sistem uyarı penceresinin yeterince yarı saydam olduğunu kabul eder. Bu pencerelerin birleşik opaklığı, dokunmalar için sistemin maksimum opaklık değerinden daha az veya bu değere eşit olmalıdır. Android 12'de bu maksimum opaklık varsayılan olarak 0, 8'dir.

Güvenilmeyen bir dokunuşun engellendiğini 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

Android 12 veya sonraki sürümleri çalıştıran cihazlarda güvenilmeyen dokunuşlar varsayılan olarak engellenir. Güvenilmeyen dokunuşlara izin vermek için 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 (güvenilmeyen dokunuşlar engellenir) geri 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 tamamlanmıyor

Android 12, görevlerinin kökünü oluşturan başlatıcı etkinliklerinde sistemin geri tuşuna basma işleminin varsayılan işlenişini değiştirir. Önceki sürümlerde sistem, Geri düğmesine basıldığında bu etkinlikleri tamamlardı. 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ıldığında geçerli olan davranışla aynıdır.

Bu değişiklik, çoğu uygulama için kullanıcıların uygulamanızdan çıkmak üzere Geri düğmesini kullandığında uygulamayı sıcak durumdan daha hızlı bir şekilde devam ettirebileceği anlamına gelir. Kullanıcıların uygulamayı soğuk durumdan tamamen yeniden başlatması gerekmez.

Uygulamalarınızı bu değişiklikle test etmenizi öneririz. Uygulamanız şu anda onBackPressed() işlevini geçersiz kılarak Activity işlevini tamamlamak için geri gezinmeyi işliyorsa uygulamanızı, tamamlamak yerine super.onBackPressed() işlevini çağıracak şekilde güncelleyin. Çağrı super.onBackPressed(), uygun olduğunda etkinliği ve görevini arka plana taşır ve uygulamalarda kullanıcılar için daha tutarlı bir gezinme deneyimi sağlar.

Ayrıca, genel olarak onBackPressed() işlevini geçersiz kılmak yerine özel geri gezinme sağlamak için AndroidX Activity API'lerini kullanmanızı öneririz. AndroidX Activity API'leri, sistemin geri tuşuna basma işlemini engelleyen bileşenler yoksa otomatik olarak uygun sistem davranışına erteler.

Grafikler ve resimler

Yenileme hızı değiştirme özelliği geliştirildi

Android 12'de, ekranın yeni yenileme hızına sorunsuz geçişi destekleyip desteklemediğine bakılmaksızın setFrameRate() kullanılarak yenileme hızı değiştirilebilir. Sorunsuz geçiş, bir veya iki saniye boyunca siyah ekran gibi görsel kesintilerin olmadığı geçişlerdir. Daha önce, ekran sorunsuz geçişi desteklemiyorsa setFrameRate() çağrıldıktan sonra genellikle aynı yenileme hızı kullanılmaya devam ediyordu. getAlternativeRefreshRates() numaralı telefonu arayarak 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 bazı harici olarak bağlı ekranlarda kesintisiz olmayan bir geçiş sırasında çağrılır.

Bu özelliği 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üm ve koşulların kabul edilmesi gerektiğinde kullanıcıya bir bildirim gösterilir. Şartlar ve koşullarla sınırlanan 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 bu ağa bağlanamaz ve alternatif veya eski bir ağ önerilmelidir.
  • isDecoratedIdentitySupported(): Önek süslemeli ağlarda kimlik doğrulama yapılırken süslenmiş kimlik öneki, ağ operatörlerinin AAA ağı içindeki birden fazla proxy üzerinden açık yönlendirme yapmak için Ağ Erişim Tanımlayıcısı'nı (NAI) güncellemesine olanak tanır (bu konuda daha fazla bilgi için RFC 7542'ye bakın).

    Android 12, PPS-MO uzantıları için WBA spesifikasyonuna uygun olması amacıyla bu özelliği uygular. Dekore edilmiş 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 işlemi başarısız olabilir.

Uygulamaların Passpoint önerisi oluşturmak için 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üzlerle ilgili güncellenen kısıtlamalar

Android 12, Android geliştiricilerle işbirliği 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 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şikliklerin bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK dışı arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilseniz de herhangi bir SDK dışı yöntemi veya alanı kullanmak uygulamanızın bozulma riskini her zaman yüksek oranda artırır.

Uygulamanızda SDK dışı arayüzler kullanılıp kullanılmadığından emin değilseniz öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK dışı 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 anlıyoruz. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmaya alternatif bulamıyorsanız yeni bir herkese açık API isteğinde bulunmalısınız.

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 başlıklı makaleyi inceleyin. Genel olarak SDK olmayan arayüzler hakkında daha fazla bilgi edinmek için SDK olmayan arayüzlerde kısıtlamalar başlıklı makaleyi inceleyin.