Android Notifications

Sibel Yıldız
Wellbees Tech
Published in
5 min readMay 26, 2021

Merhabalar, uzun zamandır ara verdiğim blog yazılarıma bomba gibi geri döndüm. Başlıktan da anlayacağınız üzere bugün Android’de Notifications konusu üzerine konuşacağız. Hazırsanız hemen başlayalım.

Notification’lar, uygulamamızın kullanıcı ara yüzünün dışında gösterilen mesajlardır. Kullanıcılara önemli bir görevi hatırlatmanın, bir durumu bildirmenin veya uygulama arka plandayken ihtiyaç duydukları önemli bilgileri iletmenin bir yoludur.

Notification’ları yerinde kullanmak gerekir. Kullanıcıyı sıkacak çok sayıda notification göndermek kullanıcı üzerinde kötü etki yaratabilir. Bu durumda kullanıcılar yararlı bulmazlarsa notification’ları kapatabilirler.

Notification’lar, görseldir, sesler içerebilir ve kullanıcının dikkatini çekmek için cihazın titremesi sağlanabilir.

Notification’lar, status bar(durum çubuğu)’da bir simge olarak gösterilir. Kullanıcılar açmak için durum çubuğunu kaydırabilir ve notification drawer’dan bildirim içeriğinin ayrıntılarını görüntüleyebilirler. Kullanıcı tarafından reddedilene kadar durum çubuğunda kalırlar.

Android 5(API level 21) ve sonrasında notification’lar uyarı olarak gösterilebilirler. Bu ekranın üst kısmında bir açılır pencere gibi görünür. Bu kullanıcının hemen bilmesi gereken önemli bildirimler içindir ve yalnızca cihazın kilidi açıksa bu şekilde görünür.

Güvenlik ayarlarına bağlı olarak cihaz kilitlendiğinde de notification’lar kilit ekranında görüntülenebilir.

Notification Anatomy

Bir notification’ın tasarımı system templates tarafından belirlenir. En yaygın bölümleri aşağıdaki resimde görüntülenmektedir.

Notification Anatomy
  1. Small icon: setSmallIcon() ile ayarlanır.
  2. App Name: Bu sistem tarafından sağlanır.
  3. Time: Bu sistem tarafından sağlanır ancak setShowWhen(false) ile gizleyebilirsiniz.
  4. Large icon: Genellikle kişi fotoğrafları için kullanılır. setLargeIcon() ile ayarlanır.
  5. Title: Bildirim başlığıdır. setContentTitle() ile ayarlanır.
  6. Text: Bildirim açıklamasıdır. setContentText() ile ayarlanır.

Temel bir notification bir başlık, bir açıklama ve bir simgeden oluşur. Temel bir notification’a ek olarak bir notification’ın tıklanabilir aksiyonları, genişletilebilir içerik ve resimleri de olabilir. Yanıt gönderme gibi hızlı eylemler gerçekleştirebilecek butonlar veya bir erteleme butonu gibi kullanıcının aksiyon alabileceği butonlar da bulunabilir.

Notification oluşturma:

Hadi gelin birlikte basit bir notification örneği yapalım ve yaparken öğrenelim.

Kullanıcı butona tıkladığında o anki saatin 1 dakika sonrası için bir alarm kuralım ve alarm süresi dolunca bir notification gönderelim. Biz zamanı bekleyip notification göndermeyeceğiz tabiki :). Gerekli ayarlamaları yapacağız ve zaman dolup AlarmReceiver, AlarmManager tarafından tetiklendiğinde bir bildirim gönderilecek. Notification özelliklerimiz de en basit şekilde bir icon bir başlık ve bir içerik metninden oluşsun. Hazırsanız başlıyoruz.

Öncelikle notifacion’ımızı tetikleyecek alarmımızı kuralım.

create alarm

Uygulamamız bir alarm ayarlamak için AlarmManager’i kullanır. AlarmManager, istenen zaman seçiminin kaydını tutar ve süre dolduğunda bir broadcast gönderir. BroadcastReceiver’den kalıtım aldığımız AlarmReceiver class’ındaki onReceive() methodunu tetikler.

AlarmReceiver’da onReceive() methodunda notification’ımızı oluşturalım.

Bir notification oluşturmak için, NotificationBuilder kullanmak gerekiyor. Builder gerekli tüm alanlara sahip olduktan sonra NotificationManager bu içeriği bir bildirim olarak görüntülememize yardımcı olur.

  • NotificationManager, notification göndermek, içeriği güncellemek ve bildirimi iptal etmekten sorumludur.
  • Eski sürümleri çalıştıran cihazları desteklemek için NotificationBuilder yerine NotificationCompatBuilder’ı kullanmak gerekiyor.

Notification simgesi için uygulamanızı temsil edecek bir seçimde bulunun. Simge, başlık ve kullanıcıya vermek istediğimiz mesajın içeriğini belirttik. Bunlar bildirim göndermek için gerekli minimum verilerdir. Bunların yanında notification’ımızı daha da özelleştirmek için birçok seçenek mevcut.

Bir notification’ı göstermek ve kullanıcıyı bilgilendirmek oldukça harikadır. Ancak kullanıcı bildirime tıklayınca ilgili ekrana dönmeyi bekler. Kullanıcıyı ilgili ekrana getirmek için notification’ımıza bir PendingIntent eklememiz gerekir. Uygulamamız tek bir ekrandan oluştuğu için tıkladığında MainActivity’e gelmesini sağlayacağız.

create intent

Öncelikle bir intent oluşturuyoruz. Context ve başlatılacak Activity’i veriyoruz. Ardından yeni bir PendingIntent oluşturuyoruz. Sistem uygulamamızı açmak için PendingIntent’i kullanacak.

PendingIntent flag: Yeni bir pendingIntent oluşturma veya mevcut olanı kullanma seçeneklerini sunar. Yeni bir notification oluşturmak istemediğimiz, ancak mevcut notification varsa güncellemek istediğimiz için PendingIntent.FLAG_UPDATE_CURRENT öğesini bayrak olarak ayarladık.

Ardından notification’ımıza PendinIntent’i vermeliyiz. Bunu Notificationbuilder’da setContentIntent öğesini çağırarak yapıyoruz. Bu sayede notification’a tıklandığında PendingIntent, MainActivity’i açarak tetiklenecektir.

AlarmReceiver class’ımızın son hali şu şekildedir.

Ayrıca setAutoCancel() öğesini true olarak ayarladık, böylece kullanıcı bildirime dokunduğunda bildirim kullanıcıyı uygulamaya götürürken kendisini kapatır.

Daha düşük api seviyesi kullanan cihazları desteklemek için, burada da önem seviyesini belirtiyoruz.(Birazdan channel kısmını okuyunca burada ne demek istediğimi anlayacaksınız)

Son olarak benzersiz bir notificaion id’si ile notify ediyoruz. Bu id mevcut notification nesnesini temsil eder ve bu notification’ı güncellemek veya iptal etmek için gereklidir.

NotificationCompatBuilder’ın bir nesnesini üretip context ve channel id vermiştik.

Peki nedir bu channel?

Channel

Android 8(API level 26) ve üstünde tüm notification bir channel’a atanmalıdır. Channel’lar bir tür bildirimi temsil eder. Channel’lar sayesinde notification’larımızı gruplayabiliriz. Ve her channel için farklı özellikler tanımlayabiliriz. Bu, kullanıcının bildirimleri kişiselleştirmesine de olanak tanır. İlgilendikleri notification türüne göre notification ayarlarını değiştirebilirler.

Örneğin iki farklı notification’ımızın olduğu iki farklı channel olduğunu düşünün. Kullanıcı kendisi için önemli olmayan notification’ın bulunduğu channel’ı devre dışı bırakabilir.

Biz geliştiriciler bir channel’da bulunan tüm notification’lara uygulanacak başlangıç ayarlarını belirleriz. Ancak başlangıç ayarlarını yaptıktan sonra kontrol kullanıcıya verilir.

Cihazdan uygulamanın channel ayarlarına erişmek için; uygulama simgesine basılı tutun, App info’yu seçin ve Notifications seçeneğine tıklayın. Burada notification channel’larının bir listesini göreceksiniz.

App Settings - Channel

Channel Oluşturma

Channel sayesinde bildirim ayarlarını ve davranışını özelleştirebiliyoruz.

Channel’lar API seviyesi 26 ve üzerinde mevcut olduğu için channel oluştururken sürüm kontrolü yapmamız gerekiyor. Channel id’yi NotificationChannel constructor’ına veriyoruz. Ardından Channel name’i veriyoruz. Bu kullanıcının kendi ayarlar ekranında göreceği değer. Son parametre olarak channel’ın önem seviyesini(IMPORTANCE_HIGH) veriyoruz.

Channel nesnemizi oluşturduktan sonra channel’ın ayarlamalarını yapıyoruz.

  • notificationChannel.enableLights(true): Notification gösterildiğinde ışıklar etkinleşecektir.
  • notificationChannel.lightColor = Color.RED: Bir notification görüntülendiğinde kırmızı bir ışık görüntülemek için.
  • notificationChannel.enableVibration(true): Titreşimi etkinleşecektir.
  • notificationChannel.description = “channel_description”: Channel açıklaması.

getSystemSerice’i çağırarak bir NotificationManager instance’sı alıyoruz. NotificationManager’da createNotificationChannel’i çağırarak önceki adımda oluşturduğumuz notificationChannel nesnesini veriyoruz.

Channel oluşturmak için bu yazdığımız fonksiyonu onCreate içinde çağırmayı unutmayalım. Fonsksiyonumuz iki parametre alıyor. String resources’dan channel id ve channel name’i veriyoruz. Burada da önceden NotificationCompatBuilder oluştururken verdiğimiz channel id’yi vermemiz gerekiyor. Eğer yanlış channel id ayarlanırsa notification başarısız olur.

Channel önem seviyesi

Android, notification’ın kullanıcıya ne şekilde gideceğini belirlemek için bu özelliği kullanır. Notification’ın önemi notification’ın bulunduğu channel’ın önemine göre belirlenir.

Yalnız şunu unutmayalım ki biz channel oluştururken bu seviyeyi kendimiz belirliyoruz fakat kullanıcı sistem ayarlarından bir channel’in önemini değiştirebilir.

Channel alert level
  • Urgent: Ses çıkarır ve bir uyarı notification’ı olarak görünür.
  • High: Ses çıkarır.
  • Medium: Ses yok.
  • Low: Ses yok ve status bar(durum çubuğun) ‘da görünmez.

Evet, basit bir notification’ın nasıl oluşturulduğunu ele aldık. Umarım keyif almışsınızdır.

Projenin tamamına buradan ulaşabilirsiniz.

Yanlış veya eksik olduğunu düşündüğünüz bir şey varsa yorum yapmaktan çekinmeyin. Keyifli günler dilerim. 😊

Kaynaklar:

Android Developer Documentation

Google Udacity

--

--