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. Mevcut bir uygulamada bu izin zaten varsa cihaz Android 14'e yükseltildiğinde önceden verilir.
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:
- 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 buna uygun şekilde yanıt verecek şekilde ayarlayın.
Bu durumdan etkilenen uygulamalar
Android 14 veya sonraki bir sürümü çalıştıran bir cihazda bu değişiklik, aşağıdaki özelliklere sahip yeni yüklenen bir uygulamayı etkiler:
- Android 13 (API düzeyi 33) veya sonraki sürümleri hedefler.
- Manifest dosyasında
SCHEDULE_EXACT_ALARM
iznini tanımlar. - Muafiyet veya ön bağış senaryosuna dahil değil.
- Takvim veya alarm uygulaması değildir.
Takvim ve çalar saat uygulamaları USE_EXACT_ALARM değerini bildirmelidir
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 USE_EXACT_ALARM
normal izni isteyebilir. USE_EXACT_ALARM
izni yükleme sırasında verilir ve bu izne sahip uygulamalar, SCHEDULE_EXACT_ALARM
iznine sahip uygulamalar gibi tam alarmlar planlayabilir.
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ğerlendirmeleri ve tam alarmların
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 yararlıdır (ör. yarın 14:00'te ya da 30 dakika içinde hareket etmesi) Aksi takdirde,postAtTime()
veyapostDelayed()
yöntemlerini kullanmanız önerilir. - Uygulamanızı güncelleme ve günlük yükleme gibi planlanmış arka plan işleri
WorkManager
, zamanlamaya duyarlı periyodik işleri planlama olanağı 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.- Sistem boştayken alarmın yaklaşık bir zamanda çalmasını istiyorum
- Yaklaşık alarm kullanın.
setAndAllowWhileIdle()
numaralı telefonu arayın. - Belirli bir zamandan sonra gerçekleşmesi gereken, kullanıcı tarafından belirtilen işlem
- Tam olmayan alarm kullanma.
set()
numaralı telefonu arayın. - Kullanıcı tarafından belirtilen ve belirli bir zaman aralığında gerçekleşebilecek işlem
- Tam olmayan alarm kullanma. Özellikle
setWindow()
numaralı telefonu arayın. İzin verilen en kısa aralığın 10 dakika olduğunu unutmayın.
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. Uygulamaların izni yoksa bir intent çağırarak kullanıcıdan izin istemeleri gerekir.
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 kullanıcılardan izni vermesini istemek için uygulamanın paket adıyla birlikte
ACTION_REQUEST_SCHEDULE_EXACT_ALARM
öğesini içeren bir intent çağırın.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 zamanlı alarm ayarlayabilir. 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))
}
}
onResume()
'te 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(...)
}
}
Reddedilen izin durumunda düzgün bir şekilde düzeyi düşür
Bazı kullanıcılar izin vermeyi reddeder. Bu senaryoda, uygulamaların deneyimi sorunsuz bir şekilde düşürmesini ve kullanım alanlarını tanımlayarak mümkün olan en iyi yedek kullanıcı deneyimini sunmaya çalışmasını ö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
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 sistem ayarlarındaki Özel uygulama erişimi sayfasından (Ayarlar > Uygulamalar > Özel uygulama erişimi > Alarmlar ve hatırlatıcılar) uygulamanızın Alarmlar ve hatırlatıcılar iznini devre dışı bırakın ve uygulamanızın davranışını gözlemleyin.