Giriş
Şu satırı dahil
ederiz.
import android.content.BroadcastReceiver;
BroadcastReceiver sistem veya uygulama olaylarını işlemek için kullanılır.
onReceive metodu
Bu metod çok uzun çalışmamalıdır. Açıklaması
şöyle.
When it runs on the main thread you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed).
onReceive Intent parametresi
XML içinde action belirtsek bile kontrol etmek için
kullanılır.
@Override
public void onReceive(Context context, Intent intent) {
if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
...
}
}
Diğer
Kullanım
İki şekilde
kullanılabilir.
1. Manifest içinde.
Bu durumda BroadcastReceiver nesnesini unregister etmeye gerek yoktur.
2. Activity içinde
Activity onResume(), onCreate() metodları içinde register edilir.
onDestroy() metodunda unregister edilir.
Tanımlama
Şöyle
yaparız
BroadcastReceiver receiver= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// do your stuff here
}
};
1. Manifest İçinde Tanımlama
Şöyle
yaparız.
<receiver android:name="com.domain.app.">
<intent-filter>
<action android:name="android.intent.action.XYZ" />
</intent-filter>
</receiver>
Action alanı bazen bir provider
olabilir.
<receiver android:name=".SmsListener">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
2. Activity İçinde Tanımlama
Örnek
Sınıfımız şöyle register
edilir.
registerReceiver(myReceiver, new IntentFilter(...));
Şöyle unregister
edilir.
unregisterReceiver(myReceiver);
Örnek
onCreate() metodunda şöyle
yaparız.
registerReceiver(this.broadCastNewMessage, new IntentFilter("bcNewMessage"));
onDestroy() içinde şöyle
yaparız.
unregisterReceiver(broadCastNewMessage);
Service sınıfında şöyle
yaparız.
sendBroadcast(new Intent().setAction("bcNewMessage"));
Wifi Taraması İçin Kullanımı
Wifi Taraması sonuçlarını almak için
kullanılabilir.
Alarm İçin Kullanımı
BroadcastReceiver sınıfı AlarmManager ile beraber kullanılarak belli bir saatte bir iş yapmak için
kullanılabilir.
Intent intent = new Intent(context, MyBroadcastReceiver.class);
PendingIntent recurring = PendingIntent.getBroadcast(...);
AlarmManager alarms = (AlarmManager) getSystemService(...);
alarms.setRepeating(...);
AlarmManager şöyle kullanılır. Önce ne zaman çalışmasını istediğimizi ve aralığını
kodlarız.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 0);
int interval = 1000 * 60 * 60 * 24;
Daha sonra alarmı
kurarız.
/* Repeating on every 24 hours interval */
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
interval, recurring);
Boot İçin Kullanımı
Boot yazısına taşıdım.
SMS okumak için Kullanımı
SMSMessage yazısına taşıdım.