Tam alarmlar, kullanıcıların bilinçli olarak davranması gereken bildirimler veya işlemler için kullanılır. gerçekleşmesidir.
SCHEDULE_EXACT_ALARM
, Android 12'de kullanıma sunulan izinle
tam alarm planlama özelliği, artık yeni yüklenen çoğu cihaza önceden
Android 13 ve sonraki sürümleri hedefleyen uygulamalar (varsayılan olarak "reddedildi" şeklinde ayarlanır). Eğer
Kullanıcı, uygulama verilerini Android 14 çalıştıran bir cihaza
yedekleme ve geri yükleme işlemini gerçekleştirirseniz izin reddedilecektir. Bir
mevcut bir uygulama bu izne zaten sahipse
Android 14'e yükseltme.
Tam alarm başlatmak için SCHEDULE_EXACT_ALARM
izni gerekir
şu API'ler aracılığıyla gerçekleştirilir veya bir SecurityException
atılır:
SCHEDULE_EXACT_ALARM
izni için mevcut en iyi uygulamalar
aşağıdakiler dahil geçerlidir:
- Planlamadan önce izni
canScheduleExactAlarms()
üzerinden kontrol edin tam alarm yok. - Uygulamanızı ön plan yayınını dinleyecek ve doğru şekilde tepki verecek şekilde ayarlayın
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
Kullanıcı izin verdiğinde sistemin gönderdiği dosya.
Bu durumdan etkilenen uygulamalar
Android 14 veya sonraki bir sürümü çalıştıran cihazlarda bu değişiklik, yeni bir aşağıdaki özelliklere sahip yüklü uygulama:
- Android 13 (API düzeyi 33) veya sonraki sürümleri hedefler.
- Manifest dosyasında
SCHEDULE_EXACT_ALARM
iznini tanımlar. - Muafiyet veya ön erişim kapsamında değilse senaryoyu izler.
- Takvim veya çalar saat uygulaması değilse.
Takvim ve çalar saat uygulamalarında USE_EXACT_ALARM değeri belirtilmelidir
Takvim veya çalar saat uygulamalarının takvim hatırlatıcıları, uyandırma göndermesi gerekir
uygulama durdurulduğunda uyarı gönderir. Bu uygulamalar şunları isteyebilir:
USE_EXACT_ALARM
normal izin. USE_EXACT_ALARM
izni,
ve yükleme sırasında izin verilir ve bu izne sahip olan uygulamalar,
tam alarmlarla aynı SCHEDULE_EXACT_ALARM
izni olan uygulamalarda.
Tam alarm gerektirmeyen kullanım alanları
Çünkü SCHEDULE_EXACT_ALARM
izni artık varsayılan olarak reddedilmiştir ve
kullanıcıların ek adımlar gerçekleştirmesi gerekir. Geliştiriciler de
kullanım alanlarını değerlendirmeye ve tam alarmın doğru olup olmadığını belirlemeye
daha mantıklı olabilir.
Aşağıdaki listede tam alarm gerektirmeyen yaygın iş akışları gösterilmektedir:
- Uygulamanızın kullanım süresi boyunca tekrarlanan işleri planlama
- Görevin anlık olarak takip edilmesi gerekiyorsa
set()
yöntemi kullanışlıdır örneğin 14:00’te ya da 30 dakika içinde çalacak Aksi takdirde,postAtTime()
veyapostDelayed()
yöntemlerini kullanın. - Uygulamanızı güncelleme ve günlükleri yükleme gibi planlı arka plan çalışmaları
WorkManager
, zamanlama açısından hassas periyodik işler programlamak için bir yöntem sunar. Bir sonraki aşamaya geçmeden önce tekrarlama aralığı ve flexInterval (en az 15 dakika) ayrıntılı bir çalışma zamanı tanımlar.- Alarmın sistem boştayken yaklaşık bir zamanda çalması gerekir
- Tam olmayan alarm kullanma. Özellikle
setAndAllowWhileIdle()
numaralı telefonu arayın. - Belirli bir sürenin sonunda yapılması gereken, kullanıcı tarafından belirtilen işlem
- Tam olmayan alarm kullanma. Özellikle
set()
numaralı telefonu arayın. - Belirli bir zaman aralığında gerçekleşebilecek, kullanıcı tarafından belirtilen işlem
- Tam olmayan alarm kullanma. Özellikle
setWindow()
numaralı telefonu arayın. Lütfen izin verilen en küçük pencere uzunluğu 10 dakikadır.
Tam alarmları kullanmaya devam etmek için taşıma adımları
Uygulamalar en azından, Google'dan önce izinlerinin olup olmadığını tam alarm planlama. İzni olmayan uygulamaların izin istemesi gerekir bir amaç çağırarak kullanıcıdan uzaklaştırırsınız.
Bu, özel bir özel istek isteği göndermek için kullanılan standart iş akışıyla izin:
- Uygulamalar onaylamak için
AlarmManager.canScheduleExactAlarms()
numarasını aramalıdır ve gerekli izne sahip olduğunu doğrulamalısınız. Uygulamanın izni yoksa şunu içeren bir intent çağırın: Uygulama paketiyle birlikte
ACTION_REQUEST_SCHEDULE_EXACT_ALARM
adını girin.Uygulamanızın
onResume()
yönteminde kullanıcının kararını kontrol edin uygulamasını indirin.Şunu dinle:
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
kullanıcının izin vermesi durumunda gönderilen yayınlar.Kullanıcı, uygulamanıza izin verdiyse, uygulamanız tam olarak alarmlar. Kullanıcı bunun yerine izni reddettiyse yazılımdaki kullanıcı deneyimi sunarak söz konusu izinle korunan bilgilere erişememektedir.
Aşağıdaki kod snippet'i,
SCHEDULE_EXACT_ALARM
izin:
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))
}
}
İzni kontrol etmek ve kullanıcının kararlarını
onResume()
:
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(...)
}
}
Reddedilen izin durumunda düzgün bir şekilde düzeyi düşür
Bazı kullanıcılar izin vermeyi reddeder. Bu senaryoda, kötü amaçlı yazılıma sahip olan ve bununla birlikte mümkün olan en iyi kullanım alanlarını belirleyerek yedek kullanıcı deneyiminden yararlanabilirsiniz.
Muafiyetler
Aşağıdaki uygulama türlerinin setExact()
veya
setExactAndAllowWhileIdle()
yöntem:
- Platform sertifikasıyla imzalanmış uygulamalar.
- Ayrıcalıklı uygulamalar.
- Güç izin verilenler listesindeki uygulamalar (uygulamanız şartlara uygunsa
bunu isteyebilirsiniz
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
intent işlemi).
Ön bağışlar
SYSTEM_WELLBEING
rol sahiplerine önceden erişim izni verilecekSCHEDULE_EXACT_ALARM
Test yönergeleri
Bu değişikliği test etmek için Alarmlar ve hatırlatıcılar izni Sistem ayarlarındaki Özel uygulama erişimi sayfasından (Ayarlar > Uygulamalar > Özel uygulama erişimi > Alarmlar ve hatırlatıcıları) tıklayın ve uygulamanızın davranışını gözlemleyin.