3-) Android’de Alarm Manager İle Belirli Zamanda Bildirim Gönderme
Herkese merhabalar,
Bu yazı bildirimler hakkında yazdığım serinin 3. yazısıdır. Eğer Android’de bildirim oluşturmanın temellerini öğrenmek istiyorsanız bu makalelere bakabilirsiniz.
Bu makalede, AlarmManager + BroadcastReceivers kullanarak belirli bir zamanda günlük hatırlatma bildirimi gönderme işlemini anlatacağım.
AlarmManager Nedir?
AlarmManager, Android platformunda belirli bir zaman diliminde veya düzenli aralıklarla tekrarlanan görevleri gerçekleştirmek için kullanılır.
Android’in diğer zamanlanmış işlemleri yönetme seçenekleri arasında WorkManager da vardır. Ama WorkManager yürütme zamanını garanti etmediğinden dolayı spesifik bir zamanda bildirim göstermek istediğimizde AlarmManager daha güvenilir bir seçenektir.
Ayrıca, AlarmManager ile özellikle doze modu durumunda dahi belirlenen işlemleri sorunsuz bir şekilde gerçekleştirebiliriz.
Android Doze Modu, cihazın uzun süreli kullanılmadığı durumlarda arka planda çalışan uygulamaları kısıtlayarak pil ömrünü artırmayı hedefler.
Peki Bunu Nasıl Yapacağız?
ReminderItem
bildirimin ne zaman tetikleneceği bilgisini tutan bir veri sınıfı oluşturacağız.NotificationAlarmScheduler
AlarmManager’ı kullanarak alarmın planlanmasına yardımcı olacak bir sınıf oluşturacağız.RunnerNotifier
sınıfı, bildirim için gerekli ayarlamaların yapıldığı bir sınıf oluşturacağız.AlarmReceiver
zamanlanmış alarm tetiklendiğinde bildirimi gösterme işlevini gerçekleştirecek.
Hadi Şu İşi Yapalım!
1. Reminder Item
ReminderItem, bir bildirimin zamanını (milisaniye cinsinden) ve id değeri içeren bir veri sınıfıdır.
2. Notification Alarm Scheduler
NotificationAlarmScheduler sınıfını AlarmScheduler arayüzü üzerinden uygulamamın amacı, bu sınıfın gelecekte farklı senaryolara uyum sağlamasını sağlamaktır. Aynı zamanda, ViewModel içinde kullanmak istediğimde ViewModel’ın test edilebilirliğini artırır ve kodu daha esnek hale getirir.
NotificationAlarmScheduler
sınıfı, alarmları planlama, iptal etme işlemlerini gerçekleştirdiğimiz bir sınıftır.
Gelin bu sınıf içerisindeki methodlara yakından bakalım.
createPendingIntent
methodu, AlarmReceiver
sınıfını hedefleyen bir Intent
oluşturmaktır. Bu şekilde, belirli bir zaman aralığında alarm tetiklendiğinde oluşturulan PendingIntent AlarmReceiver’ı
başlatarak bildiriminizi gösterecektir.
cancel
methodu oluşturulan bildirimi iptal etmek için kullanırız.
schedule
methodu paramatre olarak bir ReminderItem
nesnesi alıyor. Bu nesnede belirtilen zaman bilgisine göre günlük olarak aynı saatte tekrarlayacak bir bildirim planlamasını yapıyor. Burada tekrarlama süresine farklı parametrelerde verebiliriz. Örnek olarak;
Not: AlarmManager kullanırken
setRepeating
dışında tekrarlayan bir bildirim oluşturmak için bir fonksiyonumuz daha var. O fonksiyon ismisetInexactRepeating.
Bunların hangisini hangi durumlarda kullanmalıyız adına rehber olması için;Genellikle, zamanlama gereksinimleriniz tam olarak doğru zamana hassas olmayı gerektirmiyorsa ve pil tüketimi sizin için önemli değilse
setInexactRepeating
kullanılması tavsiye edilir.Eğer kesin zamanlamaya ihtiyaç duyuluyorsa
setRepeating
tercih edilebilir.
3. Runner Notifier
Notifier
sınıfı, bir bildirim oluşturmak için gerekli olan bilgilerin ve alt sınıflar tarafından uygulanması gereken bazı soyut yöntemleri içeren abstract
bir sınıftır.
Burada neden
NotificationChanel
kullandığımızla ilgili detaylı bir bilgi vermeyeceğim. Bunu serinin önceki yazılarında anlatmıştım. Ancak API LEVEL 26 ve üzerinde Notification Channel oluşturmamız gerekiyor.Eğer uygulamamız Android 13 ve üzerini destekliyorsa Manifest dosyamıza
android.permission.POST_NOTIFICATIONS
iznini eklememiz ve runtime’da kullanıcıdan izin almamız gerekiyor.
RunnerNotifier
sınıfı Notifier
sınıfından türetilmiş ve kullanıcıya bir koşu bildirimi göndermek için gerekli ayarlamaların yapıldığı yardımcı bir sınıftır.
Burada bildirimler için
title
vemessage
metinlerini kaynak dosyalarından (res/values/strings.xml
) alıp kullanmak daha doğru bir yaklaşım olacaktır. Bu sayede, metinlerin localization işlemleri kolaylaşır.
4. Alarm Receiver
Bu sınıfta oluşturduğumuz alarm zamanı geldiğinde onReceive tetiklenecek ve bir bildirim göndereceğiz.
Ve sonra bunu manifest.xml dosyasına kaydetmemiz gerekiyor.
<application
......
<receiver android:name=".alarm.AlarmReceiver" />
</application>
Ve MainActivity içerisinde hergün saat 19.00'da gönderilecek bildirimi planlamasını yapıyoruz.
Mova uygulamamda yakında gelecek olan filmler için bir hatırlatma kurup o filmin yayın tarihi geldiğinde kullanıcıya bildirim gönderme işlemini yaptığım örneği incelemek isterseniz Github üzerindeki Mova uygulamasını inceleyebilirsiniz.
Evett. Sonunda tamamladık. 😎
Diğer sosyal medya hesaplarımda takip etmek isterseniz:
Linkedin: https://www.linkedin.com/in/tolga-pirim/
GitHub: https://github.com/tolgaprm
Referanslar:
https://developer.android.com/develop/background-work/services/alarms/schedule
https://youtu.be/mWb_hEBLIqA?si=LcZsjJnMgGoDWY2Y