3-) Android’de Alarm Manager İle Belirli Zamanda Bildirim Gönderme

Tolga Pirim
Kotlin Türkiye
Published in
3 min readJan 8, 2024
Created by Adobe Firefly

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.

1-) Android’de Bildirimler (Notifications) Giriş

2-)Android’de Bildirimler

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 ismi setInexactRepeating. 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 titleve messagemetinlerini 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

--

--