Posts Tagged BroadcastReceiver
Broadcast Receiver nedir ve nasıl kullanılır?
Posted by Omer Saatcioglu in Android on November 11th, 2009

Sizlere Broadcast Receiver’in ne olduğunu ve ne işe yaradığını anlatıcam. Sonra da, örnek bir projeyle nasıl kullanıldığını göstericem. Broadcast Receiver, sistem veya başka bir uygulama tarafından çalışıyor olmasa bile broadcast ettiği intent’leri yakalamamızı ve tepki vermemizi sağlayan komponentlerdir. Örneğin, kullanıcı bir SMS attığında veya Müzik Çalar’daki şarkıyı değiştirdiğinde sistem bunun olduğuna dair bir broadcast yapar. Sonraki yazılarımda nasıl broadcast yapıldığını anlatıcam ama şimdilik broadcast yakalama işlemini oğrenelim.
Örnek olarak, müzik çalar’da çalan şarkı sayacı yapabiliriz. Super class’i BroadcastReceiver olan MüzikBroadcastReceiver adında bir class tanımlayalın. Gördüğünüz gibi, onReceive metodunu üstüne yazıp Broadcast geldiği zaman SharedPreferences’ten daha önce kaydedilmiş calanSarkiSayac’ını alıp bir artırıp tekrar SharedPreferences’e yazıyor.
public class MuzikBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { SharedPreferences sharedPreferences = context. getSharedPreferences(SarkiSayaci.SHARED_PREFERENCE, Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); int calanSarkiSayisi = sharedPreferences.getInt(SarkiSayaci.CALANSARKISAYISI, 0); calanSarkiSayisi++; editor.putInt(SarkiSayaci.CALANSARKISAYISI, calanSarkiSayisi); editor.commit(); } }
Tamam çok güzel. Ama, MuzikBroadcastReceiver şarkı değiştiğini nasıl anlıyor ve intent broadcast edildiği zaman bu obje aktive oluyor? Onu da AndroidManifest.xml’e eklediğimiz şu satırlarla sağlıyoruz.
<receiver android:name=".MuzikBroadcastReceiver"> <intent-filter> <action android:name="com.android.music.metachanged" /> </intent-filter> </receiver>
Gördüğünüz gibi, intent filter altında action olarak com.android.music’in metachanged aksiyonu için sadece aktive edilmesini sağlıyoruz. Böylece, her şarkı değiştiğinde SharedPreferences’teki sayacımızı bir arttıran mekanizmamızı yaratmış olduk. Şimdi de bunu gösterme sırası geldi ki en basit kısmı. Ana aktivitemizde (ki bu örnekte SarkiSayaci) onPause metodu üstüne yazılır.
@Override protected void onResume() { SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFERENCE, Context.MODE_PRIVATE); if(sharedPreferences != null){ int calanSarkiSayisi = sharedPreferences.getInt(CALANSARKISAYISI, 0); ((TextView) findViewById(R.id.TextViewSayac)).setText(Integer.toString(calanSarkiSayisi)); } super.onResume(); }
Özetleyecek olursak, Broadcast Receiver kullanabilmek için BroadcastReceiver’dan derive edilmiş objenin onReceive metodu üstüne yazmanız ve AndroidManifest.xml’deki intent filter’da broadcast’ini beklediğiniz aksiyonu belirtmeniz yeterlidir. İşinize yaraması dileğiyle…
Örnek projeye şurdan ulaşabilirsiniz:
http://code.google.com/p/yazarbozar-omer/source/browse/#svn/trunk/SarkiSayaci
Güncel Yorumlar