25 Mart 2018 Pazar

BroadcastReceiver Sınıfı

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.

Hiç yorum yok:

Yorum Gönder