📡Receiver | Broadcast

Android üzerinde haber (broadcast) alma veya alıcılarının kullanımı

❣️ Broadcast Receiver Hakkında

  • 🚫 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

  • 🗨 AlertDialog gibi işlemler yerine Notification 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();
       }
   }
}

‍‍🧙‍♂ Detaylı bilgi için Broadcast receivers alanına bakabilirsin.

🔸 Receiver Türleri

🎳 Static Receiver

  • 📝 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>

✨ Dynamic 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);

🎫 Broadcast Kayıtları

  • 🎌 İlk olarak receiver yapısını uygulamamıza registerReceiver ile kaydederiz

  • 🙋‍♂️ Genelde onResume içerisinde registerReceiver işlemi yapılır

  • 🚫 onPause içerisinde unregisterReceiver metodu ile kaldırırız

mReceiver = new AlarmReceiver();
this.registerReceiver(mReceiver, intentFilter);
 unregisterReceiver(mReceiver);

‍🧙‍♂ Detaylı bilgi için Broadcast receivers alanına bakabilirsin.

🏠 Local Broadcast Alımı

LocalBroadcastManager.getInstance(this)
    .registerReceiver(mReceiver, 
           new IntentFilter(CustomReceiver.ACTION_CUSTOM_BROADCAST));
 LocalBroadcastManager.getInstance(this)
    .unregisterReceiver(mReceiver);

🔏 İzin Gerektirenlerin Alımı

<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 );

👮‍♂ Broadcast Kısıtlamaları

‍🧙‍♂ Detaylı bilgi için Restricting broadcasts alanına bakabilirsin.

🌟 Broadcast Tavsiyeleri

🔗 Faydalı Bağlantılar

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk