
Uygulamanızı SplashScreen API, Yaklaşık Konum, PendingIntent Mutability ve çok daha fazlası için hazırlama…
Google, Ekim 2021’de Android 12’yi (L) duyurdu ve Mart 2022’ye kadar Pixel telefonlardan başlayarak kararlı yapı piyasaya sürüldü ve kısa süre sonra diğer büyük markalar tarafından takip edildi.
Android 12, Gizlilik ve Performansa da odaklanan bazı büyük görsel ve kullanıcı deneyimi değişiklikleriyle birlikte gelir.
Google Play Store’un Kasım 2022’ye kadar tüm uygulamaları API Düzey 31’e (yani Android 12) hedefleyecek şekilde güncellemeye zorladığı ve hala birçoğunuzdan Android’e nasıl geçiş yapılacağına dair sorular aldığım için bu makalenin gerekli olduğunu düşündüm. 12, işte burada!
Bu makalede, önce önemli şeylerle hızlı bir şekilde başlayacağız ve daha sonra bahsetmeye değer bazı geliştirmeleri ve mevcut API’lerin ve özelliklerin kullanımdan kaldırılmasını gözden geçireceğiz.
Öyleyse, uygulamanızı Android 12’ye hedeflemek için yapmanız gereken tüm değişikliklere ve akılda tutulması gereken şeylere hızlıca geçelim.
Güvenli İhracat
Bildirimde herhangi bir bileşeni (Etkinlik, Hizmet ve Yayın Alıcısı gibi) tanımladığınızda, şöyle bir şey görmüş/kullanmış olmalısınız. "android:exported"
Varsayılan olarak bu öznitelik şu şekilde ayarlanmıştır: true
, bu, bileşene uygulamanızın dışından erişilebileceği anlamına gelir. Örneğin, uygulamanızdaki bir etkinlik amaç filtreleri içeriyorsa, diğer uygulamaların onu başlatmasına izin vermek için bu öğeyi “true” olarak ayarlayın.
API 31’den itibaren şunları yapmanız gerekir: bu özniteliğe açıkça bir değer ayarla.
Genel bir kural şudur: Uygulama bileşeni şunları içeriyorsa: LAUNCHER
kategori, küme android:exported
ile true
. Diğer çoğu durumda, ayarla android:exported
ile false
.
<service android:name="com.example.app.backgroundService"
android:exported="false">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
Bunu yapmamak derleme zamanı verebilir:
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.
hakkında daha fazla bilgi edinin Güvenli Bileşen Dışa Aktarma ve android:dışa aktarıldı
Bekleyen niyet değiştirilebilirliği
API seviyesi 31’den itibaren, her birinin değişebilirliğini belirtmeniz gerekecektir. PendingIntent
uygulamanızın oluşturduğu nesne.
verildiğini beyan etmek PendingIntent
nesne değiştirilebilir veya değişmezse, PendingIntent.FLAG_MUTABLE
veya PendingIntent.FLAG_IMMUTABLE
sırasıyla bayrak.
val updatedPendingIntent = PendingIntent.getActivity(
applicationContext,
NOTIFICATION_REQUEST_CODE,
updatedIntent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
Bunu yapmamak, sistem bir IllegalArgumentException
:
PACKAGE_NAME: Targeting S+ (version 31 and above) requires that one of
FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if
some functionality depends on the PendingIntent being mutable, e.g. if
it needs to be used with inline replies or bubbles.
Yaklaşık Konum
Android 12’den başlayarak, kullanıcılar artık uygulamanız istediği zaman bile Kesin konum veya Yaklaşık Konum sağlamayı seçebilir. ACCESS_FINE_LOCATION
çalışma zamanı izni.

Kullanıcıların gizliliğine saygı göstermek için şimdi her iki senaryoyu da ele almanız gerekecek, ancak uygulama kullanım durumunuz Kesin Konum gerektiren bir durumsa, aynısının kullanıcıya sorulduğundan ve uygulamanızda buna göre işlendiğinden emin olun. Devamını oku kesin konum için soran.
okumanı tavsiye ederim Konum İzinleri İstemeyle İlgili En İyi Uygulamalar.
SplashScreen API’si
Daha önce çoğumuz bir Aktivite kullanarak veya bir Aktivite üzerinde bir pencere teması ayarlayarak özel bir Açılış ekranları oluştururduk.
Daha önce Android 11 veya önceki sürümlerde özel bir açılış ekranı uyguladıysanız, uygulamanızı SplashScreen
Android 12’den başlayarak doğru şekilde görüntülendiğinden emin olmak için API.
Android 11 çalıştıran cihazlarda bu bir sorun olmayacaktır ancak API seviyesini 31’i hedeflediyseniz ve yine de SplashScreen API’ye geçmediyseniz, sistem Android 12 cihazlarda bir Çalışma Zamanı İstisnası oluşturur.
Sistemin her zaman yeniyi uyguladığını da belirtmekte fayda var. Android sistem varsayılan açılış ekranı üzerinde soğuk ve sıcak başlangıçlar tüm uygulamalar için. Varsayılan olarak, bu sistem varsayılan açılış ekranı, uygulamanızın başlatıcı simgesi öğesi ve windowBackground
temanızın (tek bir renkse).
Nasıl yapılacağı hakkında bilgi edinin mevcut Açılış ekranı uygulamanızı Android 12 veya sonraki bir sürüme taşıyın
hakkında daha fazla bilgi edinin Android Açılış Ekranları
Bonus: Yeni SplashScreen API’sinin yanı sıra şunları da kullanabilirsiniz: Uygulama Başlangıç kitaplığı uygulama başlangıcında bileşenleri başlatmak için.
Tam alarm izni
Tam bir alarm oluşturmak için uygulamanızın, aşağıdaki pencerede görünen “Alarmlar ve hatırlatıcılar” özelliğine erişimi olması gerekir. Özel uygulama erişimi sistem ayarlarında ekran.
Bu özel uygulama erişimini elde etmek için, SCHEDULE_EXACT_ALARM
manifestodaki izin.
Bunu yapmazsanız, sistem atar SecurityException
.
Ancak buradaki önemli nokta, bu özel izni almak ve Google Play Store’dan onay almak için uygulamanızın aşağıdaki türden olması gerektiğidir:
1. Saat veya Zamanlayıcı uygulaması
2. Takvim veya Hatırlatma uygulaması
Web amacı çözünürlüğü
Android 12’den (API düzeyi 31) başlayarak, uygulamanızın Etkinliği artık genel web amaçlarına çözümlenemez, uygulamanız bu web amacını işlemek için onaylanana kadar sistem onları varsayılan tarayıcıya yönlendirir.
hakkında daha fazla bilgi edinin uygulamanız bu onayı nasıl alabilir?.
Ayrıca hakkında daha fazla bilgi edinin Uygulama Bağlantıları doğrulama değişiklikleri.
Şimdiye kadar, uygulamanızı Android 12’ye geçirmek için ihtiyaç duyduğunuz temel konuları ele aldık, ancak bilmeniz gereken birkaç şey var.
Kısıtlı Uygulama Bekleme Paketi
hakkında okuduk Uygulama Bekleme Paketleri önce, basitçe söylemek gerekirse, bu paketler, sistemin uygulamaların ne kadar yakın zamanda ve ne sıklıkta kullanıldığına bağlı olarak kaynakların isteklerine öncelik vermesine yardımcı olur.
Şimdi yeni bir Uygulama Bekleme Kovası tanıtıldı: Kısıtlı.
Belgelere göre, sistem, uygulamanızı kısıtlı kovaya yerleştirip yerleştirmemeye karar vermek için kullanım kalıplarına ek olarak uygulamanızın davranışını da dikkate alır. Uygulamanız sistem kaynaklarını daha sorumlu bir şekilde kullanıyorsa, uygulamanızın kısıtlı pakete alınma olasılığı daha düşüktür. Ayrıca, kullanıcı doğrudan uygulamanızla etkileşim kurarsa sistem uygulamanızı daha az kısıtlayıcı bir klasöre yerleştirir.
hakkında daha fazla bilgi edinin Kısıtlı Uygulama Bekleme Paketi.
Mikrofon ve kamera göstergeleri ve geçiş

Tıpkı Apple ürünlerinde olduğu gibi, Android de artık cihazınızın Kamerası veya Mikrofonu kullanımdayken durum çubuğunda bir gösterge göreceğiniz bu özelliğe sahiptir.
Ayrıca, Android 12 veya sonraki sürümleri çalıştıran desteklenen cihazlar, kullanıcıların tek bir geçiş seçeneğine basarak cihazdaki tüm uygulamalar için kamera ve mikrofon erişimini etkinleştirmesine ve devre dışı bırakmasına olanak tanır.
hakkında daha fazla bilgi edinin daha hassas izinlere erişmek için en iyi uygulamalar.
Kök başlatıcı etkinlikleri artık Geri basıldığında bitmiyor
Aktiviteniz kök aktivite ise (yani görev yığınındaki son aktivite), geri düğmesine basıldığında öldürülmez, sadece arka plana alınır. Tıpkı ana sayfa düğmesine nasıl basıldığı gibi.
Bu değişiklik, uygulamanızdan çıkmak için Geri’yi kullanan kullanıcıların, uygulamanızı bir sıcak durumuygulamayı tamamen yeniden başlatmak yerine soğuk hal.
Ayrıca, aşağıdakiler için AndroidX Etkinlik API’lerinin kullanılması önerilir. özel geri navigasyon sağlamageçersiz kılmak yerine onBackPressed()
Okumak bu konuda daha fazlası.
Bouncy Castle uygulaması kaldırıldı
Android 12 birçok şeyi kaldırır Şişme kale Tüm AES algoritmaları dahil olmak üzere, daha önce kullanımdan kaldırılmış olan kriptografik algoritmaların uygulamaları. Sistem bunun yerine şifrele Bu algoritmaların uygulamaları.
Okumak bu konuda daha fazlası.
Display#getRealSize ve getRealMetrics : kullanımdan kaldırıldı
Aşağıdaki yöntemler kullanımdan kaldırıldı:
Bu yöntemler yerine Jetpack kullanılması önerilir. WindowManager
içeren bir kütüphane, WindowMetrics
Android 4.0’ı (API düzeyi 14) ve üstünü destekleyen sınıf.
Uygulamalar sistem iletişim kutularını kapatamaz
Android 12’den itibaren, sistem iletişim kutularını şu şekilde kapatamazsınız: ACTION_CLOSE_SYSTEM_DIALOGS
niyet eylemi kullanımdan kaldırıldı. Bu amacı başlatmaya çalışırsanız, sistem basitçe bir SecurityException
. Android 11 cihazlarda sistem amacı görmezden gelir.
Ancak birkaç özel durum vardır, Devamını oku değiştirmek.
Önerilerinizi bana bildirin ve Android 12’de önemli bir değişiklikten bahsetmeyi özlediğimi düşünüyorsanız.
Artık harika uygulamanızı Android 12’ye taşımak için her şeyi bildiğinize göre, ne bekliyorsunuz?
Bir dahaki sefere görüşürüz.
Teşekkürler!