Sobes.tech
Junior

Какво е BroadcastReceiver в Android?

sobes.tech AI

Отговор от AI

Това е компонент, който реагира на системни или потребителски широковещателни съобщения. Той няма потребителски интерфейс и е предназначен за изпълнение на фонови операции в отговор на определени събития.

Основни характеристики:

  • Реагира на намерения (Intents) с определено действие (action).
  • Краткотраен компонент, неговият метод onReceive() се изпълнява за кратък период.
  • Не е предназначен за дълги операции. Ако е необходима продължителна работа, трябва да се стартира Service от onReceive().
  • Може да бъде регистриран статично в манифеста или динамично в кода.

Примери за използване:

  • Реагиране на промени в състоянието на мрежата (android.net.conn.CONNECTIVITY_CHANGE).
  • Реагиране на стартиране на системата (android.intent.action.BOOT_COMPLETED).
  • Обработка на входящи SMS съобщения.
  • Получаване на потребителски съобщения, изпратени от други компоненти на приложението или други приложения.

Регистрация в манифеста:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" за да могат други приложения да изпращат intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Регистрация в кода:

// В Activity или Service
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// В onDestroy() или onStop() - важно е да се анулира регистрацията!
unregisterReceiver(receiver);

Клас BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Тук се изпълнява кодът при получаване на Intent
        // Например:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "Получено е персонализирано действие!", Toast.LENGTH_SHORT).show();
        }
    }
}