description |
---|
Android üzerinde haber (broadcast) alma veya alıcılarının kullanımı |
- 🚫 UI thread üzerinden gerçekleştiğinden uzun işlemler yapılmamalı
- ⛔
onReceive()
metodu içerisinde asenkron işlemler yapmayın- 🤷♂️ Yapsanız bile
return
metodundan sonra broadcast işlemleri sonlandırılır - ☠️ Haliyle işlem asenkron olsa bile broadcast yapısına bağlı olduğundan ölecektir
- 🤷♂️ Yapsanız bile
- 🗨
AlertDialog
gibi işlemler yerineNotification
yapısı tercih edilmelidir
//Subclass of the BroadcastReceiver class.
private class myReceiver extends BroadcastReceiver {
// Override the onReceive method to receive the broadcasts
@Override
public void onReceive(Context context, Intent intent) {
//Check the Intent action and perform the required operation
if (intent.getAction().equals(ACTION_SHOW_TOAST)) {
CharSequence text = "Broadcast Received!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
}
{% hint style="info" %} 🧙♂ Detaylı bilgi için Broadcast receivers alanına bakabilirsin. {% endhint %}
- 📝 Manifest üzerinden kayıt edilmeleri gerekir
- 😥 Uygulamamızı hedef almayan yayınlarını Android 8.0'dan itibaren alamaz
- 🎈 implicit broadcast exceptions yayınlarını hala alabilmektedir
<receiver
android:name=".AlarmReceiver"
android:exported="false">
<intent-filter>
<action android:name=
"com.example.myproject.intent.action.ACTION_SHOW_TOAST"/>
</intent-filter>
</receiver>
- 👀 Uygulama üzerinden ilgilendiğimiz broadcast'e erişmek için
IntentFilter
kullanırız - 🏗️ Genel kullanımı
onCreate
üzerinde yapılmaktadır (?)
IntentFilter intentFilter = new IntentFilter();
filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
- 🎌 İlk olarak
receiver
yapısını uygulamamızaregisterReceiver
ile kaydederiz - 🙋♂️ Genelde
onResume
içerisinderegisterReceiver
işlemi yapılır - 🚫
onPause
içerisindeunregisterReceiver
metodu ile kaldırırız
mReceiver = new AlarmReceiver();
this.registerReceiver(mReceiver, intentFilter);
unregisterReceiver(mReceiver);
{% hint style="info" %} 🧙♂ Detaylı bilgi için Broadcast receivers alanına bakabilirsin. {% endhint %}
- 👮♂️ Local Broadcast, Dynamic Receiver ile alınmak zorundadır
LocalBroadcastManager.getInstance(this)
.registerReceiver(mReceiver,
new IntentFilter(CustomReceiver.ACTION_CUSTOM_BROADCAST));
LocalBroadcastManager.getInstance(this)
.unregisterReceiver(mReceiver);
<receiver android:name=".MyBroadcastReceiver"
android:permission="android.permission.SEND_SMS">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>
IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
registerReceiver(receiver, filter, Manifest.permission.SEND_SMS, null );
{% hint style="info" %} 🧙♂ Detaylı bilgi için Restricting broadcasts alanına bakabilirsin. {% endhint %}