Davranış değişiklikleri: Android 12'yi hedefleyen uygulamalar

Önceki sürümlerde olduğu gibi Android 12 de etkileyebilir. Aşağıdaki davranış değişiklikleri yalnızca uygulamalar için geçerlidir Bu kampanyalar, Android 12 veya sonraki sürümü hedefleyen kullanıcılardan oluşur. Uygulamanız kullanıyorsanız, uygulamanızı bu davranışları destekleyecek şekilde değiştirmeniz gerekir uygun şekilde ele alacağız.

Ayrıca, tüm uygulamaları etkileyen davranış değişikliklerinin listesini de incelediğinizden emin olun. Android 12'de kullanılabilir.

Kullanıcı deneyimi

Özel bildirimler

Android 12, tamamen özel bildirimlerin görünümünü ve davranışını değiştirir. Daha önce, özel bildirimler bildirim alanının tamamını kullanabiliyordu. ve kendi düzen ve stillerini sunar. Bu durum, benimsediğimiz kullanıcıların kafasını karıştırabilir veya farklı cihazlarda düzen uyumluluğu sorunlarına neden olabilir.

Android 12'yi hedefleyen uygulamalar için özel içerik görünümlerine sahip bildirimler tam bildirim alanını kullanma, Bunun yerine sistem, standart bir tıklayın. Bu şablon, özel bildirimlerde de süslemeleri (örneğin, bildirim simgesi) tüm eyaletlerde diğer bildirimler ve genişletme olanakları (daraltılmış durumda) ve bildirimin simgesi, uygulama adını tıklayın ve uygun kapsamı daraltın (genişletme durumunda). Bu davranış, davranışıyla neredeyse aynıdır: Notification.DecoratedCustomViewStyle.

Bu sayede Android 12, tüm bildirimlerin görsel olarak tutarlı olmasını ve kolay bir şekilde gönderilmesini sağlar. kullanıcılar için bulunabilir, alışkın olduğunuz bildirim genişletmesi sayesinde tarayabilirsiniz.

Aşağıdaki resimde, standart şablonda özel bir bildirim gösterilmektedir:

Aşağıdaki örneklerde, özel bildirimlerin daraltılmış bir durumda nasıl oluşturulacağı gösterilmektedir ve genişletilmiş bir durum vardır:

Android 12'deki değişiklik, şu özel alt sınıfları tanımlayan uygulamaları etkiler: Notification.Style veya Notification.Builder adlı kullanıcının yöntemleri setCustomContentView(RemoteViews), setCustomBigContentView(RemoteViews), ve setCustomHeadsUpContentView(RemoteViews).

Uygulamanız tamamen özel bildirimler kullanıyorsa en kısa sürede yeni şablon eklemeniz gerekir.

  1. Özel bildirim değişikliğini etkinleştirin:

    1. Yeni davranışı etkinleştirmek için uygulamanızın targetSdkVersion ayarını S olarak değiştirin.
    2. Yeniden derleyin.
    3. Uygulamanızı Android 12 çalıştıran bir cihaza veya emülatöre yükleyin.
  2. Özel görünümler kullanan tüm bildirimleri test ederek, sizin gibi göründüklerinden emin olun. içiniz rahat olur. Testler sırasında aşağıdaki noktalara dikkat edin: ve gerekli düzenlemeleri yapın:

    • Özel görünümlerin boyutları değişti. Genellikle yükseklik, . Daraltılmış özel içeriğin maksimum yüksekliği 106 dp'den düşürüldü 48 dp'ye. Ayrıca, daha az yatay alan vardır.

    • Tüm bildirimler, Android 12'yi hedefleyen uygulamalar için genişletilebilir. Bu genellikle setCustomContentView kullanıyorsanız şunu da kullanmanız gerekir: setBigCustomContentView kontrol edin.

    • "Dikkat"in istediğiniz gibi görünüyorsa, bildirim kanalının önemini "HIGH" seviyesine çıkarın. (Çalışır durumda ekranında).

Android 12 veya sonraki sürümleri hedefleyen uygulamalarda sistem, Android App Links'in doğrulanmış olmalıdır. Bu değişiklikler, uygulama bağlama deneyiminin güvenilirliğini artırır ve daha fazla hem de uygulama geliştiriciler ve son kullanıcılar için kontrol olanağı sağlar.

Uygulamanızda web bağlantılarını açmak için Android App Link doğrulamasından yararlanıyorsanız Amaç eklerken doğru biçimi kullandığınızdan emin olun filtreleri Android uygulama bağlantısı doğrulaması. Özellikle, bu amaçların filtreleri, BROWSABLE kategorisini içerir ve https şemasını destekler.

Ayrıca doğrulama uygulamanızın bağlantılarını kullanabilirsiniz.

Pencere içinde pencere davranışında iyileştirmeler

Android 12'de pencere içinde pencere (PIP) modu için davranış iyileştirmeleri eklendi. Ayrıca hareketler için geçiş animasyonlarına yönelik önerilen görünümle ilgili iyileştirmeler öğe tabanlı gezinme ile ilgili daha fazla bilgi edinin.

Pencere içinde pencere" bölümüne bakın iyileştirmeleri ekleyebilirsiniz.

Tost tasarımı yenilendi

Android 12'de toast görünümü yeniden tasarlandı. Kısa iletiler artık iki satır metinle sınırlıdır ve uygulamayı gösterir simgesine dokunun.

Mesajda gösterilen bir kısa mesaj pop-up'ının gösterildiği Android cihaz resmi
            "Mesaj gönderiliyor" bir uygulama simgesinin yanında

Daha fazla bilgi için Bildirim mesajlarına genel bakış başlıklı makaleyi inceleyin.

Güvenlik ve gizlilik

Yaklaşık konum

Android 12 veya sonraki sürümleri çalıştıran cihazlarda kullanıcılar yaklaşık konum doğruluk oranı.

WebView'daki modern SameSite çerezleri

Android'in WebView bileşeni Chromium'a dayanır, . Chromium kullanıma sunuldu üçüncü taraf çerezlerinin işlenmesinde daha fazla güvenlik sağlamak ve ve kullanıcılara daha fazla şeffaflık ve kontrol sunar. Android 12 sürümünden itibaren Uygulamalar şunları hedeflediğinde bu değişiklikler WebView kapsamında da yer alır: Android 12 (API düzeyi 31) veya sonraki sürümler.

Bir çerezin SameSite özelliği, herhangi bir çerezle gönderilip gönderilemeyeceğini kontrol eder veya yalnızca aynı site istekleriyle yapılabilir. Aşağıdaki gizlilik koruma uygulamaları değişiklikler, üçüncü taraf çerezlerinin varsayılan olarak işlenmesini iyileştirir ve istenmeyen siteler arası paylaşıma karşı:

  • SameSite özelliği olmayan çerezler SameSite=Lax olarak kabul edilir.
  • SameSite=None içeren çerezler de Secure özelliğini belirtmelidir. Bu, güvenli bir bağlam gerektirir ve HTTPS üzerinden gönderilmelidir.
  • Bir sitenin HTTP ve HTTPS sürümleri arasındaki bağlantılar artık siteler arası kabul ediliyor bu nedenle, uygun şekilde işaretlenmedikçe çerezler gönderilmez. SameSite=None; Secure

Geliştiriciler için genel yol, siteler arası çerezi tanımlamaktır. bağımlılıkları ve kritik kullanıcı akışlarınıza bağlı olarak SameSite özelliğinin değeri, gerektiğinde uygun değerlerle açıkça ayarlanır. Şunu yapmalısınız: web sitelerinde çalışmasına izin verilen çerezleri açıkça belirtme veya HTTP'den HTTPS'ye geçen aynı site gezinmelerinde kesintisiz çalışır.

Web geliştiricileri için bu değişikliklerle ilgili kapsamlı rehberlik için bkz. SameSite Cookies Açıklamalı ve Düzenli SameSite.

Uygulamanızdaki SameSite davranışlarını test edin

Uygulamanız WebView kullanıyorsa veya akışlarınızı Android 12 WebView'da test etmenizi öneririz. Sorun tespit ederseniz yeni SameSite davranışları bulunur.

Giriş işlemleri, yerleştirilmiş içerik ve oturum açma akışlarıyla ilgili sorunlara dikkat edin. ve diğer kimlik doğrulama akışlarının güvenli olmayan bir ile başlar ve güvenli bir sayfaya geçer.

Bir uygulamayı WebView ile test etmek isterseniz aşağıdaki adımlardan birini uygulayarak test etmek istediğiniz bir uygulamadır:

Android'de WebView için uzaktan hata ayıklama hakkında bilgi edinmek üzere Başlarken Android Cihazlarda Uzaktan Hata Ayıklama özelliğini kullanın.

Diğer kaynaklar

SameSite modern davranışları ve Chrome'a sunum hakkında daha fazla bilgi ve WebView için Chromium SameSite Güncellemeleri'ni ziyaret edin öğrenin. WebView'da bir hata bulursanız veya Chromium'u kullanıyorsanız herkese açık Chromium sorunundan bildirebilirsiniz İzleyici.

Hareket sensörlerinin hız sınırlaması vardır

Uygulamanız aşağıdakileri hedefliyorsa kullanıcılar hakkındaki hassas olabilecek bilgileri korumak için: Android 12 veya sonraki sürümlerde sistem, yenilemeye bir sınır uygular Belirli hareket sensörlerinden ve konum sensörlerinden gelen veri hızı.

Sensör hakkında daha fazla bilgi edinin. hız sınırlamasını kullanın.

Uygulamayı hazırda bekletme

Android 12, izinleri otomatik sıfırlama seçeneğinden sonra genişler. davranış (API düzeyi 30) kullanıma sunulacak. Uygulamanız bunu hedefliyorsa Android 12'deyseniz kullanıcı birkaç saniye boyunca uygulamanızla etkileşimde bulunmazsa aylar sonra, sistem verilen izinleri otomatik olarak sıfırlar ve uygulamanızı hazırda bekleme durumuna benzer.

Uygulama ile ilgili kılavuzdan daha fazla bilgi edinin hazırda bekleme.

Veri erişimi denetiminde ilişkilendirme beyanı

Android 11'de (API düzeyi 30) kullanıma sunulan veri erişimi denetleme API'si, ilişkilendirme oluşturmak etiketleri, kullanım alanlarından bahsedeceğiz. Bu etiketler, projenizin hangi kısımlarına uygulamanızın belirli bir veri erişimi türü gerçekleştirmesi gerekir.

Uygulamanız Android 12 veya sonraki bir sürümü hedefliyorsa bunları beyan etmeniz gerekir: ilişkilendirme etiketlerini uygulamanızın manifest dosyasına ekleyin.

ADB yedekleme kısıtlaması

Android 12, gizli uygulama verilerinin korunmasına yardımcı olmak için adb backup komutudur. Android 12 (API düzeyi 31) veya sonraki sürümleri hedefleyen uygulamalar için Kullanıcı adb backup komutunu çalıştırdığında, uygulama verileri diğer dışa aktarılan sistem verileridir.

Test veya geliştirme iş akışlarınız adb backup kullanan uygulama verilerini kullanıyorsa Artık uygulamanızın verilerini dışa aktarmayı etkinleştirmek için android:debuggable uygulamanızın manifest dosyasında true konumuna ekleyin.

Daha güvenli bileşen dışa aktarma

Uygulamanız Android 12 veya sonraki bir sürümü hedefliyorsa ve etkinlikler, hizmetler veya yayın niyet kullanan alıcılar filtreleri kullanıyorsanız şunu beyan etmek: android:exported özelliği bu uygulama bileşenleri için de geçerlidir.

Uygulama bileşeni LAUNCHER kategorisi, ayarlandı android:exported - true. Diğer çoğu durumda, android:exported öğesini şu değere ayarlayın: false.

Aşağıdaki kod snippet'inde intent içeren bir hizmet örneği android:exported özelliği false olarak ayarlanmış filtre:

<service android:name="com.example.app.backgroundService"
         android:exported="false">
    <intent-filter>
        <action android:name="com.example.app.START_BACKGROUND" />
    </intent-filter>
</service>

Android Studio'da Mesajlar

Uygulamanız, intent filtreleri ancak android:exported bildirmiyor. Aşağıdaki uyarı Mesajlar, kullandığınız Android Studio sürümüne bağlı olarak gösterilir:

Android Studio 2020.3.1 Canary 11 veya sonraki sürümler

Aşağıdaki mesajlar görünür:

  1. Manifest dosyanızda aşağıdaki lint uyarısı görünür:

    When using intent filters, please specify android:exported as well
    
  2. Uygulamanızı derlemeye çalıştığınızda aşağıdaki derleme hatası mesajı gösterilir görünür:

    Manifest merger failed : Apps targeting Android 12 and higher are required \
    to specify an explicit value for android:exported when the corresponding \
    component has an intent filter defined.
    
Android Studio'nun eski sürümleri

Uygulamayı yüklemeye çalışırsanız Logcat şu hata mesajını görüntüler:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_VERIFICATION_FAILURE
List of apks:
[0] '.../build/outputs/apk/debug/app-debug.apk'
Installation failed due to: 'null'

Beklemedeki amaçlar değişkenliği

Uygulamanız Android 12'yi hedefliyorsa cihazın değişkenliği sizin için geçerli olan her bir PendingIntent için de geçerlidir. Bu ek şart, uygulamanızın güvenliğini artırır.

Beklemedeki amaç değişkenliği değişikliğini test etme

Uygulamanızda değişkenlik beyanının eksik olup olmadığını öğrenmek için Android Studio'da aşağıdaki lint uyarısını takip edin:

Warning: Missing PendingIntent mutability flag [UnspecifiedImmutableFlag]

Güvenli olmayan intent lansmanları

Android 12 ve sonraki sürümler, platform güvenliğini iyileştirmek için güvenli olmayan uygulama başlatmalarını algılayan amaçlar. Zaman sistem böyle güvenli olmayan bir başlatma, kullanıcı adı StrictMode ihlali söz konusu olur.

Performans

Ön plan hizmeti başlatma kısıtlamaları

Android 12 veya sonraki sürümleri hedefleyen uygulamalar ön planı başlatamaz hizmetlerinde çalışırken arka plan, birkaç özel alan dışında durumlar hakkında daha fazla bilgi edinin. Bir uygulama arka planda çalışırken bir ön plan hizmeti bir istisna oluşur (birkaç özel durum hariç).

Plan yapmak ve hızlandırılmış bir şekilde başlamak için WorkManager'ı kullanabilirsiniz. arka planda çalışırken kontrol edin. Zaman açısından hassas olan işlemleri ön plan hizmetlerini tam olarak aynı anda başlatmak için alarm.

Tam alarm izni

Uygulamaları, sistem kaynaklarını korumaya teşvik etmek için Android 12 ve sonraki sürümler için tam alarmların "Alarmlar ve hatırlatıcılar Özel uygulama erişimi ekranında görünen özellik sistem ayarları.

Bu özel uygulamaya erişim elde etmek için SCHEDULE_EXACT_ALARM izninin olması gerekir.

Tam alarmlar yalnızca kullanıcılara yönelik özellikler için kullanılmalıdır. Şu konu hakkında daha fazla bilgi edinin: bir veri kümesi belirlemek için kabul edilebilir alarm.

Davranış değişikliğini devre dışı bırak

Uygulamanızı Android 12'yi hedeflemeye hazırlarken geçici olarak hata ayıklanabilir derlemenizdeki davranış değişikliğini devre dışı bırakın varyantı olarak gönderin. Bunu yapmak için aşağıdakilerden birini yapabilirsiniz:

  • Geliştirici seçenekleri ayar ekranında Uygulama Uyumluluğu'nu seçin Değişiklikler. Görünen ekranda uygulamanızın adına dokunun, ardından uygulamanızı kapatın REQUIRE_EXACT_ALARM_PERMISSION [REQUIRE_EXACT_ALARM_PERMISSION]
  • Geliştirme makinenizdeki bir terminal penceresinde aşağıdaki komutu çalıştırın:

    adb shell am compat disable REQUIRE_EXACT_ALARM_PERMISSION PACKAGE_NAME
    

Bildirim trambolin kısıtlamaları

Kullanıcılar bildirimlerini görüyorsanız bazı uygulamalar bir uygulamayı başlatarak bildirim dokunduğunda bileşeninin sonunda Kullanıcının nihayet gördüğü ve etkileşimde bulunduğu etkinlik. Bu uygulama bileşeni bildirim trambolini olarak bilinir.

Android 12 veya sonraki sürümleri hedefleyen uygulamalar, uygulama performansını ve kullanıcı deneyimini iyileştirmek için %'si, hizmetlerden veya yayın alıcıları bildirim trambolinleri. Başka bir deyişle, kullanıcı bir bildirime dokunduktan sonra veya içindeki bir işlem düğmesini bildirimi görürseniz uygulamanız startActivity() bir hizmet veya yayın alıcısı içinde gösterilir.

Uygulamanız bir hizmetten veya yayın alıcıdan etkinlik başlatmaya çalıştığında bildirim trambolini gibi işlev gören bir bildirimle sistem, başlıyor ve Logcat:

Indirect notification activity start (trampoline) from PACKAGE_NAME, \
this should be avoided for performance reasons.

Hangi uygulama bileşenlerinin bildirim trambolinleri olarak işlev gördüğünü belirleyin

Uygulamanızı test ederken bir bildirime dokunduktan sonra, uygulamanızda bildirim trambolini işlevi gören hizmet veya yayın alıcı. Bunun için aşağıdaki terminal komutunun çıkışına bakın:

adb shell dumpsys activity service \
  com.android.systemui/.dump.SystemUIAuxiliaryDumpService

Çıkışın bir bölümünde "NotifEngagementLog" metni yer alır. Bu bölüm başlayan bileşeni tanımlamak için gerekli olan bilgileri karar verir.

Uygulamanızı güncelleme

Uygulamanız bir hizmetten veya yayın alıcıdan şu işlemleri başlatırsa: aşağıdaki taşıma adımlarını tamamlayın:

  1. Şu özelliklere sahip bir PendingIntent nesnesi oluşturun: kullanıcıların bildirime dokunduktan sonra gördükleri etkinlikle ilişkilidir. bildirimi görürsünüz.
  2. Parça olarak önceki adımda oluşturduğunuz PendingIntent nesnesini kullanın bir proje yöneticisi olarak bildirimi bulunmaktadır.

Etkinliğin kaynağını belirlemek için, örneğin günlük kaydı yapmak amacıyla ve bildirimi gönderirken ekstraları kullanmalıdır. Merkezi günlük kaydı için ActivityLifecycleCallbacks veya Jetpack yaşam döngüsü gözlemcileri.

Davranışı değiştir

Uygulamanızın hata ayıklaması yapılabilir bir sürümünü test ederken veya NOTIFICATION_TRAMPOLINE_BLOCK uygulama uyumluluk işaretini kullanarak kısıtlayın.

Yedekleme ve geri yükleme

Çalışan ve uygulamayı hedefleyen uygulamalarda yedekleme ve geri yüklemenin çalışma şeklinde değişiklikler yapıldı Android 12 (API düzeyi 31). Android yedekleme ve geri yüklemenin iki biçimi vardır:

  • Bulut yedeklemeleri: Kullanıcı verileri, kullanıcının Google Drive'ında depolanır. Böylece, bu cihaza veya yeni cihaza geri yüklenebilir.
  • Cihazdan cihaza (D2D) aktarımlar: Kullanıcı verileri doğrudan Kullanıcının eski cihazından yeni cihazı (ör. kablo kullanarak).

Verilerin nasıl yedeklendiği ve geri yüklendiğiyle ilgili daha fazla bilgi için Kullanıcıyı yedekleme verileri otomatik yedeklemeyle ve anahtar/değer çiftlerini Android Yedekleme Hizmeti.

D2D aktarım işleviyle ilgili değişiklikler

Android 12 ve sonraki sürümleri çalıştıran ve bu sürümleri hedefleyen uygulamalar için:

  • XML ile dahil etme ve hariç tutma kurallarını belirtme yapılandırma mekanizması D2D aktarımlarını etkilemez ancak bulut tabanlı yedekleme ve geri yükleme işlemlerini etkiler (ör. Google Drive yedeklemeleri). Alıcı: D2D aktarımları için kurallar belirtmeniz gerekiyorsa, kapsanan yeni yapılandırmayı kullanmanız gerekir göreceğiz.

  • Bazı cihaz üreticilerinin cihazlarında android:allowBackup="false", Google Drive'a yedeklemeyi devre dışı bırakır, ancak uygulama için D2D aktarımları devre dışı bırakmaz.

Yeni dahil etme ve hariç tutma biçimi

Android 12 ve sonraki sürümleri çalıştıran ve bu sürümleri hedefleyen uygulamalar, farklı bir biçim kullanabilirsiniz. Bu biçim fark yaratıyor Google Drive yedeklemesi ile D2D aktarımı arasında açık bir şekilde bulut yedeklemeleri ve D2D için dahil etme ve hariç tutma kurallarını ayrı ayrı belirtin aktarmalısınız.

İsteğe bağlı olarak, yedekleme kurallarını belirtmek için de kullanabilirsiniz. Bu durumda, Android 12 veya sonraki sürümleri çalıştıran cihazlarda daha önce kullanılan yapılandırmalar yoksayılır. daha yüksek. Android 11 çalıştıran cihazlar için eski yapılandırma hâlâ gereklidir veya daha düşük olmasını sağlayın.

XML biçimi değişiklikleri

Aşağıda, Android'de yedekleme ve geri yükleme yapılandırması için kullanılan biçim verilmiştir. 11 ve altı:

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string" />
</full-backup-content>

Aşağıda kalın biçimdeki değişiklikler gösterilmektedir.

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </device-transfer>
</data-extraction-rules>

Daha fazla bilgi için aşağıdaki ilgili bölüme bakın rehberimizi inceleyin.

Uygulamalar için manifest işareti

Uygulamalarınızı yeni XML yapılandırmasına yönlendirmek için Manifest dosyanızdaki android:dataExtractionRules özelliği dosyası olarak kaydedebilirsiniz. Yeni XML yapılandırmasını seçtiğinizde, Eski yapılandırmayı işaret eden android:fullBackupContent özelliği yoksayıldı Android 12 veya sonraki sürümleri çalıştıran cihazlarda. Aşağıdaki kod örneğinde, yeni manifest dosyası girişleri:

<application
    ...
    <!-- The below attribute is ignored. -->
    android:fullBackupContent="old_config.xml"
    <!-- You can point to your new configuration using the new
         dataExtractionRules attribute . -->
    android:dataExtractionRules="new_config.xml"
    ...>
</application>

Bağlantı

Bluetooth izinleri

Android 12, BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, ve BLUETOOTH_CONNECT izin verir. Bu izinler, hedef kitleyi hedefleyen Android 12'yi Bluetooth ile etkileşimde bulunmak için kullanma Android cihazlarda, özellikle de cihaz konumuna erişmesi lazım.

Cihazınızı Android 12 veya sonraki bir sürümü hedeflemeye hazırlamak için güncelleyin: her şeyi öğreteceğim. Eski bir Bluetooth grubu belirtmek yerine izin, daha modern bir Bluetooth seti beyan etmek izinleri hakkında daha fazla bilgi edinin.

Eşler arası eş zamanlı + İnternet bağlantısı

Android 12 (API düzeyi 31) veya sonraki bir sürümü hedefleyen uygulamalar için eş zamanlı eşler arası ve internet bağlantıları sayesinde aynı anda kablosuz bağlantı sağlanabilir Hem eş cihaza hem de internet sağlayan birincil ağa bağlandığında, ve kullanıcı deneyimini daha sorunsuz hale getiriyor. Uygulama hedefleme Android 11 (API düzeyi 30) veya önceki sürümler, eski davranışı kullanmaya devam eder. birincil kablosuz ağın, eşe bağlanmadan önce bağlantısı kesildi olanak tanır.

Uyumluluk

WifiManager.getConnectionInfo() , şunun için WifiInfo’i döndürebilir: ekleyebilirsiniz. Bu nedenle, API'nin davranışı Android 12 ve sonraki sürümlerde aşağıdaki yöntemleri uygulayın:

  • Yalnızca tek bir kablosuz ağ varsa WifiInfo değeri döndürülür.
  • Birden fazla kablosuz ağ varsa ve çağrı uygulaması bir eşler arası bağlantıda ise eş cihaza karşılık gelen WifiInfo geri döndü.
  • Birden fazla kablosuz ağ mevcutsa ve sesli arama uygulaması kullanılamadığında P2P direkt bağlantıyı tetiklemek için, internet sağlayan birincil bağlantının WifiInfo döndürüldü.

İki eşzamanlı eşlemeyi destekleyen cihazlarda daha iyi bir kullanıcı deneyimi sunmak tüm uygulamaları öneririz. Özellikle de pili tetikleyen P2P direkt bağlantılar: Görüşme yerine WifiManager.getConnectionInfo() ve onun yerine şunu kullanın: NetworkCallback.onCapabilitiesChanged() kaydetmek için kullanılan NetworkRequest ile eşleşen WifiInfo nesnenin tümünü almak için NetworkCallback. getConnectionInfo() şu tarih itibarıyla kullanımdan kaldırıldı: Android 12.

Aşağıdaki kod örneğinde, WifiInfo öğesinin bir NetworkCallback:

Kotlin

val networkCallback = object : ConnectivityManager.NetworkCallback() {
  ...
  override fun onCapabilitiesChanged(
           network : Network,
           networkCapabilities : NetworkCapabilities) {
    val transportInfo = networkCapabilities.getTransportInfo()
    if (transportInfo !is WifiInfo) return
    val wifiInfo : WifiInfo = transportInfo
    ...
  }
}

Java

final NetworkCallback networkCallback = new NetworkCallback() {
  ...
  @Override
  public void onCapabilitiesChanged(
         Network network,
         NetworkCapabilities networkCapabilities) {
    final TransportInfo transportInfo = networkCapabilities.getTransportInfo();
    if (!(transportInfo instanceof WifiInfo)) return;
    final WifiInfo wifiInfo = (WifiInfo) transportInfo;
    ...
  }
  ...
};

mDNSResponseer yerel API

Android 12, uygulamaların mDNSResponseer arka plan programı ile mDNSReplyer yerel API'sini kullanın. Önceden bir uygulama ağda bir hizmete kaydettiğinde ve getSystemService() yönteminde, mDNSResponseer arka plan programını başlatmış uygulama henüz NsdManager yöntemi çağırmadı. Daha sonra, arka plan programı tüm düğümlü çoklu yayın gruplarına bağlanarak sistemin daha fazla uyanmasına neden olur. ve ek güç harcayın. Android 12'de pil kullanımını en aza indirmek için Artık sistem, mDNSReplyer arka plan programını yalnızca gerektiğinde başlatır. ve sonrasında durdurur.

Bu değişiklik mDNSResponseer arka plan programının ne zaman kullanılabileceğini etkilediği için mDNSResponseer arka plan programının çağrılmasından sonra başlatılacağını getSystemService() yöntemi, sistemden şunu içeren iletiler alabilir: mDNSResponseer arka plan programı kullanılamıyor. NsdManager kullanan ve kullanmayan uygulamalar mDNSReplyer yerel API'sini kullanmak bu değişiklikten etkilenmez.

Satıcı kitaplıkları

Tedarikçi firma tarafından sağlanan yerel paylaşılan kitaplıklar

NDK olmayan yerel paylaşılan kitaplıklar silikon tedarikçileri veya cihaz üreticileri tarafından sağlananlara erişilemez. Uygulama Android 12 (API düzeyi 31) veya sonraki sürümleri hedefliyorsa varsayılan olarak. İlgili içeriği oluşturmak için kullanılan kitaplıklara yalnızca <uses-native-library> kapanış etiketinin hemen öncesine yapıştırın.

Uygulama Android 11 (API düzeyi 30) veya önceki sürümleri hedefliyorsa <uses-native-library> etiketi gerekli değildir. Bu durumda, tüm yerel kullanıcılar kitaplığına NDK kitaplığı olup olmadığına bakılmaksızın erişilebilir.

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

Android 12, SDK dışı kısıtlanmış öğelerin güncel listelerini içerir Android geliştiricileriyle ortak çalışmaya dayalı arayüzler ve en yeni dahili test. Mümkün olduğunda, herkese açık alternatiflerin SDK dışı arayüzleri kısıtlamadan önce kullanıma sunuyoruz.

Uygulamanız Android 12'yi hedeflemiyorsa bu değişikliklerden bazıları sizi hemen etkilemeyebilir. Ancak şu anda SDK olmayan arayüzler (uygulamanızın hedef API seviyesine bağlı olarak), SDK dışı bir yöntem veya alan kullanmak her zaman uygulamasını indirin.

Uygulamanızın SDK olmayan arayüz kullanıp kullanmadığından emin değilseniz uygulama öğrenin. Uygulamanız SDK dışı arayüz kullanıyorsa alternatiflerine geçiş yaptık. Bununla birlikte, bazı uygulamalarda SDK dışı arayüzler için geçerli kullanım alanları. Alternatif bir alternatif bulamazsanız Uygulamanızdaki bir özellik için SDK olmayan arayüz kullanmak istiyorsanız yeni genel API.

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ı. Daha fazla bilgi edinmek için SDK dışı arayüzler hakkında bilgi edinmek için SDK dışı arayüzlerle ilgili kısıtlamalara göz atın. bilgi edinin.