Android BroadcastReceiver Kullanımı

Broadcast (yayın yapmak) genel tanımı itibariyle, bir gönderici ve bir veya birçok alıcıyı içeren bir kavramdır. Örneğin; radyo yayını. Radyo istasyonu burada gönderici (yayıncı) ve radyolar ise alıcıdır.

Bir diğer örnek; toplu sms göndermek. Burada da sms mesajını gönderen cihaz gönderici (yayıncı) ve sms mesajının gönderileceği cihaz(lar) da alıcı(lar) olmaktadır. Burada dikkat edilecek olursa, toplu sms belirli bir numara havuzuna gönderilmekte. Yani daha önceden kimlere sms gönderileceği bir numara havuzunda belirlenmiştir.

Android’de de durum benzeri şekildedir. Broadcast mesajı almak isteyen uygulama, ilgili broadcast için ilgili göndericinin alıcılar listesinde tanımlanmış olması gerekmektedir. Bu da sisteme “ben şu isimli uygulamayım ve şu broadcast mesajı için beni listeye kaydet” isteğiyle sağlanmaktadır. Peki Android’de ne tür broadcast mesajları vardır? Android’deki broadcast mesajları genellikle sistem kaynaklarında değişiklik meydana geldiğinde tetiklenirler. Örneğin; internetin açılıp kapanması, uçak modunun açılıp kapanması vs. gibi durumlarda broadcast mesajı yayınlanır.

(Görsel http://en.proft.me/2017/03/10/android-broadcastreceiver-tutorial/ adresinden alıntıdır.)

Broadcast mesajları sadece sistem uygulamaları tarafından yayınlanmazlar; geliştirdiğimiz uygulamaların da broadcast mesajı yayınlamasını sağlayabiliriz.

Örnek uygulamamızda ACCESS_NETWORK_STATE broadcast mesajını dinliyor olacağız. Bu mesaj, ağ (network) durum değişikliklerinde (Wi-Fi, 3G, 4G) sistem tarafından ilgili uygulamalara yayınlanır; onlardan birtanesi de bizim uygulamamız olmak üzere. Wi-Fi’ı açtığımızda veya kapattığımızda ACCESS_NETWORK_STATE broadcast mesajı sistem tarafından yayınlanacak ve biz de uygulamamızda bu mesajı yakalayıp Logcat takip ekranında Wi-Fi durumunun değiştiğine dair bilgilendirme mesajı yazdıracağız.

Uygulamamız MainActivity.java ve broadcast mesajını yakalayacak olan sınıfı içeren Receiver.java isimli dosyalardan oluşacaktır.

Öncelikle AndroidManifest.xml dosyasında gerekli izinleri ve broadcast mesajını yakalayacak olan sınıfı belirtmeliyiz.

AndroidManifest.xml dosyası aşağıdakine benzer olmalıdır:

Dikkat edilecek olursa .Receiver, mesajı yakalayacak olan sınıfı belirtmekte. Ve ayrıca action etiketi içerisinde yakalanacak mesaj türünü belirttik. Örnek olması adına adına, telefonun açıldığına dair yayınlanan broadcast mesajını kontrol edecek bildirimleri de dosyaya ekledim. android:enabled=”true” ifadesi Receiver sınıfının bu mesajları alacağı anlamına gelmektedir. İfadeyi android:enabled=”false” şeklinde değiştirdiğimizde, Receiver sınıfı, belirtilen broadcast mesajlarını, yayınlandıkları zaman yakalayamayacaktır.

Genel şablon şu şekildedir:

 

Receiver.java

Dikkat edilecek olursa, broadcast mesajını almasını istediğimiz sınıf, BroadcastReceiver taban (base) sınıfından türetilmelidir. Ayrıca bu taban sınıfa ait onReceive fonksiyonu türetilmiş sınıfta ayrıca tanımlanmalıdır. (Override işlemi.) Bu fonksiyon Context ve Intent türünde iki adet parametre almakta. Daha fazla kafa karışıklığı yaratmamak adına, bu parametrelerin ne anlama geldikleriyle şimdilik ilgilenmiyoruz.

Sistemin uygulamamızı broadcast mesajı bekleyen bir uygulama olarak tanıması için uygulamayı kurduktan sonra çalıştırmamız şart değil. Siz uygulamayı kurup açmasanız dahi, uygulamanız broadcast mesajını dinlemeye başlar. Bunu sistem, AndroidManifest.xml dosyasına bakarak sağlamaktadır. Bu sebeple MainActivity.java dosyası içerisine ek kod yazmanıza gerek yoktur, varsayılan (default) olarak bırakabilirsiniz.

 

Referanslar:

https://developer.android.com/guide/components/broadcasts.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://www.tutorialspoint.com/android/android_broadcast_receivers.htm

https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-401/broadcastreceiver-kullanimi