5 Ekim 2013 Cumartesi

Android Dersleri 1 - [BroadCastReceiver Kullanımı]

BroadCastReceiver Kullanımı

Ne zaman Android’ in genel sistemi çapında gerçekleşen olaylar hakkında bir bilgi edinmek isterseniz BroadCast Receiver yapısını projenize yerleştirmeniz gerekmektedir. Bu işlemi gerçekleştirdiğiniz andan itibaren sistem event’ lerinden (sadece register olduklarınız )gelen bildirimler uygulamanız tarafından yakalanacaktır.BroadCast Receiver Android ‘ in 4 temel parçasından biridir.

BroadCastReceiver Ne İçin Kullanılır?

Buradaki temel nokta Android sizleri Sistem eventleri hakkında uyarmaktadır. Bu doğrultuda uygulamalarınıza kullanıcı dostu bir takım işlevsel özellikler eklemenize imkan tanımaktadır. Google Play Store incelendiğinde bir çok uygulamanın başarılı bir biçimde bu yapıyı uygulamarına implement ettiği görülmektedir.

Projeye BroadCastReceiver Yapısının Dahil Edilmesi

Projenize BroadCastReceiver dahil ederken yapmanız gereken iki ana adımbulunmaktadır.
  1. BroadCastReceiver ‘ ın bir alt sınıfı olan bir sınıf oluşturmalısınız.
  2. Bu sınıf içerisinde onReceive()metodunu implement etmeniz gerekmektedir.

BroadCastReceiver Alt Sınıfı Oluşturulması

Her bir BroadcastReceiver Android’ inBroadCastReceiver sınıfının bir alt sınıfı olmalıdır. Bu ana sınıf abstract bir sınıftır ve implement edilmesi gereken bir metoda sahiptir. Evet bu sınıf içerisindeabstract bir metot yer almaktadır ve adı da onReceive() dir.

 onReceive() metodunun implement edilmesi

Android register olunan eventler meydana geldiğinde onReceive metodunu çağırır. Örnek vermek gerekirse Şarj düzeyinin azaldığı zaman bilgilendirilmek isteyebilirsiniz. Bu durumda sizin oluşturmuş olduğunuz receiver yapınız Intent.ACTION_BATTERY_LOW olayı için register olmalıdır.
onReceive metodu iki tane parametre almaktadır. 
contextContext nesnesi ekstra bilgiye veya bir servisi veya activity ‘ i başlatmak için kullanılabilir.
intentIntent nesnesi receiver’ in register olduğu action ile ilişkilidir.

Intent nesnesi onReceive () metoduna event ile alakalı kullanımak üzere extra bilgiyi taşır.
Context nesnesi ise genel anlamda bir servis veya activity yapısının başlatılması için kullanılmaktadır.
Servisler BroadCastReceiver yapısıyla birlikte kullanılabilirler. Servisler geniş bir konudur ve yeteri kadar bilgi sahibi değilseniz şu yazıdan gerekli bilgileri edinebilirsiniz.

Uygulamanız içerisinde register olabileceğiniz System-wide event leri

Bir çok system event Intent sınıfı içerisinde final static alanlar olarak tanımlanmıştır. Bundan başka ,API içerisinde özel broadcast eventleri öneren pek çok sınıf bulunmaktadır. (BluetoothDevice ,TextToSpeech.Engine UsbManager ,AudioManager.)
Android ciddi manada uygulamalarımız içerisinde yararlanabileceğimiz pek çok event’ i bizlere sunmaktadır.

Manifest içerisinde bir Event için Register Olma

Genel olarak broadcast receiver larAndroidManifest.xml dosyası içerisinde tanımlanabilir ve düzenlenebilirler. Bu şekilde oluşturulan BroadCastReceiveryapısına “statically registered”denmektedir.
Receiver yapınızı manifest dosyası içerisinde <receiver> tag’ i kullanılarak tanımlayabilirsiniz.
Receiver tagi içerisinde yer alan <intent-filter> ise receiver yapısının tepki vereceği event ‘ in tanımlanması için kullanılmaktadır.
Burada dikkat edilmesi gereken nokta doğru değerlerin buraya yerleştirilmesidir ve bu konuda size “documentation”yardımcı olacaktır. Daha önce söyledğimiz gibi BroadCast Action ları için Android ‘ de final static alanlar tanımlanmıştır ve API sürekli bu sabit değeri saklar. Sizde manifest dosyanızda bu değerleri kullanmak zorundasınızdır.
Eğer manifest dosyası içerisinde receiver kaydı yaptıysanız event gerçekleştiğinde sizin receiver çağırılacaktır. onReceive() metodu biter bitmez sizin receiver durdurulacaktır.

Programatik olarak BroadcastReceiver register edilmesi

Alternatif olarak dinamik olarak kodunuz içerisinden de bu işlemi gerçekleştirebilirsiniz. Yapmanız gereken tek şey registerReceiver() metodunu çağırmaktır.
registerReceiver() metodu iki tane parametre alır.
  • Receiver: register olmak istediğiniz BroadCast Receiver
  • Filter:   sizin receiver ‘ ın dinlemesi gereken intent filter nesnesi
Burada lifecycle nın doğru bir şekilde kontrol altına alınması tamamen sizin görevinizdir. Dolayısıla dinamik olarak bir receiver tanımladığınızda Activity ‘ nizin onPause() metodunda aynı receiver’ i unregister etmeniz gerekmektedir.
Activity ‘ nizin onResume() metodun receiver ‘ in register edilmesi ve onPause() metodunda ise unregister edilmesi sanırım en doğru çözüm yolu olacaktır.

 Kendi receiver ‘ ımızı nasıl yaratırız ?

Android tarafından bizlere default olarak  sunulan receiver kodları dışında kendi receiver kodlarımızı da yaratabiliriz. Bunun için yapmamız gereken şey, AndroidManifest dosyasında alıcı belirtirken android:name değerini kendi anahtar değerimizle değiştirmektir.
Bu tanıma göre MyReceiver sınıfı akilliyazilim.android.broadcastreceiver adında bir BroadCastgönderildiğinde uyarılacak ve onReceive metodu harekete geçecektir.

Hiç yorum yok:

Yorum Gönder