Tam alarmlar, kullanıcıların bilinçli bildirimleri veya belirli bir zamanda gerçekleşmesi gereken işlemler içindir.
Uygulamaların tam alarm planlamaları için Android 12'de kullanıma sunulan SCHEDULE_EXACT_ALARM
izni, artık Android 13 ve sonraki sürümleri hedefleyen yeni yüklenen uygulamaların çoğuna sağlanmamaktadır (varsayılan olarak reddedilir olarak ayarlanacaktır). Kullanıcı, uygulama verilerini bir yedekleme ve geri yükleme işlemiyle Android 14 çalıştıran bir cihaza
aktarırsa izin yine de reddedilir. Bu izin mevcut bir uygulamada zaten varsa cihaz Android 14'e yükseltildiğinde bu izin önceden verilir.
Aşağıdaki API'ler aracılığıyla tam alarm başlatmak için SCHEDULE_EXACT_ALARM
izni gerekir. Aksi takdirde SecurityException
gönderilir:
Aşağıdakiler de dahil olmak üzere SCHEDULE_EXACT_ALARM
izniyle ilgili mevcut en iyi uygulamalar geçerli olmaya devam edecektir:
- Tam alarm planlamadan önce
canScheduleExactAlarms()
ile izni kontrol edin. - Uygulamanızı, kullanıcı izin verdiğinde sistemin gönderdiği
ön plan yayınını
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
dinleyecek ve bu yayına uygun şekilde tepki verecek şekilde ayarlayın.
Bu durumdan etkilenen uygulamalar
Bir cihazda Android 14 veya sonraki bir sürüm kullanılıyorsa bu değişiklik, yeni yüklenmiş ve aşağıdaki özelliklere sahip bir uygulamayı etkileyecektir:
- Android 13 (API düzeyi 33) veya sonraki sürümleri hedefler.
- Manifest'te
SCHEDULE_EXACT_ALARM
iznini tanımlar. - Muafiyet veya izin öncesi senaryosunun kapsamında değildir.
- Takvim veya çalar saat uygulaması değildir.
Takvim ve çalar saat uygulamaları USE_EXACT_ALARM belirtmelidir
Takvim veya çalar saat uygulamalarının, uygulama artık çalışmadığında takvim hatırlatıcıları, uyandırma alarmları veya uyarılar göndermesi gerekir. Bu uygulamalar USE_EXACT_ALARM
normal iznini isteyebilir. Yükleme sırasında USE_EXACT_ALARM
izni verilir ve bu izne sahip uygulamalar, SCHEDULE_EXACT_ALARM
iznine sahip uygulamalar gibi tam alarm planlayabilecek.
Tam alarm gerektirmeyebilecek kullanım alanları
SCHEDULE_EXACT_ALARM
izni artık varsayılan olarak reddedildiğinden ve izin verme sürecinde kullanıcıların ekstra adımlar gerçekleştirmesi gerektiğinden, geliştiricilerin kullanım alanlarını değerlendirmeleri ve kullanım alanları için tam alarmların hâlâ uygun olup olmadığını belirlemeleri önemle tavsiye edilmektedir.
Aşağıdaki listede, tam alarm gerektirmeyebilecek yaygın iş akışları gösterilmektedir:
- Uygulamanızın kullanım süresi boyunca tekrarlanan işleri planlama
set()
yöntemi, görevin gerçek zamanlı kısıtlamaları dikkate alması gerekiyorsa (ör. yarın saat 14:00'te veya 30 dakika sonra devreye girecekse) kullanışlıdır. Diğer durumlarda bunun yerinepostAtTime()
veyapostDelayed()
yöntemlerini kullanmanız önerilir.- Uygulamanızı güncelleme ve günlükleri yükleme gibi planlı arka plan çalışmaları
WorkManager
, zamanlamaya duyarlı periyodik çalışmalar planlamak için bir yöntem sunar. İş için ayrıntılı çalışma zamanı tanımlamak amacıyla bir tekrar aralığı ve flexInterval (en az 15 dakika) sağlayabilirsiniz.- Sistem boştayken alarmın yaklaşık bir zamanda çalması gerekir
- Değişken zamanlı alarm kullanma. Özellikle,
setAndAllowWhileIdle()
numaralı telefonu arayın. - Kullanıcı tarafından belirtilen ve belirli bir süre sonra yapılması gereken işlem
- Değişken zamanlı alarm kullanma. Özellikle,
set()
numaralı telefonu arayın. - Belirli bir zaman aralığında gerçekleşebilecek, kullanıcı tarafından belirlenen işlem
- Değişken zamanlı alarm kullanma. Özellikle,
setWindow()
numaralı telefonu arayın. İzin verilen en küçük pencere uzunluğunun 10 dakika olduğunu unutmayın.
Tam alarm kullanmaya devam etmek için taşıma adımları
Uygulamalar en azından, tam alarm planlamadan önce izne sahip olup olmadığını kontrol etmelidir. Uygulamaların izni yoksa bir intent çağırarak kullanıcıdan bu izni istemesi gerekir.
Bu, özel izin isteme için kullanılan standart iş akışıyla aynıdır:
- Uygulamalar, uygun izne sahip olduğunu onaylamak için
AlarmManager.canScheduleExactAlarms()
'i çağırmalıdır. Uygulamanın izni yoksa kullanıcılardan izin vermelerini istemek için uygulamanın paket adıyla birlikte
ACTION_REQUEST_SCHEDULE_EXACT_ALARM
öğesini içeren bir niyet çağırın.Uygulamanızın
onResume()
yönteminde kullanıcının kararını kontrol edin.Kullanıcı izin verirse gönderilen
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
yayınlarını dinleyin.Kullanıcı uygulamanıza izin verdiyse uygulamanız tam alarmlar ayarlayabilir. Kullanıcı izni reddederse uygulama deneyiminizi zarifçe düşürerek, izinle korunan bilgiler olmadan kullanıcıya işlevsellik kazandırın.
Aşağıdaki kod snippet'inde, SCHEDULE_EXACT_ALARM
izninin nasıl kontrol edileceği gösterilmektedir:
val alarmManager: AlarmManager = context.getSystemService<AlarmManager>()!!
when {
// If permission is granted, proceed with scheduling exact alarms.
alarmManager.canScheduleExactAlarms() -> {
alarmManager.setExact(...)
}
else -> {
// Ask users to go to exact alarm page in system settings.
startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}
}
onResume()
ürününde izni kontrol etmek ve kullanıcının kararlarını işlemek için örnek kod:
override fun onResume() {
…
if (alarmManager.canScheduleExactAlarms()) {
// Set exact alarms.
alarmManager.setExact(...)
}
else {
// Permission not yet approved. Display user notice and revert to a fallback
// approach.
alarmManager.setWindow(...)
}
}
İzin reddedildiğinde kaliteyi olumsuz yönde düşürme
Bazı kullanıcılar izni vermeyi reddeder. Bu senaryoda, deneyimleri sorunsuz bir şekilde düşürmesi için uygulamalara öncelik vermenizi ve yine de kullanım alanlarını belirleyerek olası en iyi yedek kullanıcı deneyimini sunmaya çalışmanızı öneririz.
Muafiyetler
Aşağıdaki uygulama türlerinin setExact()
veya setExactAndAllowWhileIdle()
yöntemlerini çağırmasına her zaman izin verilir:
- Platform sertifikasıyla imzalanmış uygulamalar.
- Ayrıcalıklı uygulamalar.
- Güç izin verilenler listesindeki uygulamalar (uygulamanız şartlara uygunsa
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
intent işlemini kullanarak bunu isteyebilirsiniz).
Ön hibeler
SYSTEM_WELLBEING
rolü sahiplerine öncedenSCHEDULE_EXACT_ALARM
verilecektir.
Test yönergeleri
Bu değişikliği test etmek için sistem ayarlarındaki Özel uygulama erişimi sayfasından (Ayarlar > Uygulamalar > Özel uygulama erişimi > Alarmlar ve hatırlatıcılar) uygulamanıza ilişkin Alarmlar ve hatırlatıcılar iznini devre dışı bırakın ve uygulamanızın davranışını gözlemleyin.