Example – Receiving System Broadcasts

Example – Receiving System Broadcasts

1. Basic Concepts of Broadcast

1. What are System Broadcasts

  • Android includes many built-in system-level broadcasts to notify applications of system state changes.
  • Common system broadcasts:
    • Low battery / battery level changes
    • Boot completed (BOOT_COMPLETED)
    • Network status changes (CONNECTIVITY_CHANGE)
    • Airplane mode toggle
    • Time / time zone changes

2. Purpose of Broadcast Receivers

  • Apps listen for target broadcasts by registering broadcast receivers.
  • When a broadcast arrives, the system automatically calls the receiver’s onReceive() method.
  • Implement business logic inside the onReceive() method.

2. Two Registration Methods for Broadcasts

Comparison ItemDynamic Registration (Code Registration)Static Registration (Manifest Registration)
Registration LocationInside components such as Activity / ServiceAndroidManifest.xml
LifecycleBound to the registered componentIndependent of components; can receive broadcasts even when the app is not started
FlexibilityHigh; register / unregister at any timeLow; determined at app installation
Applicable ScenariosBroadcasts that need awareness of component lifecycleGlobal broadcasts, boot startup, etc.
Restrictions on Newer Android VersionsNo special restrictionsAndroid 8.0+ imposes heavy restrictions on implicit broadcasts

Important: Static registration for the CONNECTIVITY_CHANGE (network change) broadcast is not allowed on Android 7.0 and above. Dynamic registration must be used instead.

3. Creating a Broadcast Receiver

Basic Steps

  1. Create a new class that extends BroadcastReceiver
  2. Override the onReceive(Context context, Intent intent) method
  3. Write logic to handle incoming broadcasts inside onReceive()

Code

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Handle broadcast logic
    }
}Code language: PHP (php)

4. Full Workflow for Dynamic Registration

1. Define Member Variables

private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Code language: PHP (php)

2. Register inside onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    networkChangeReceiver = new NetworkChangeReceiver();
    intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
    registerReceiver(networkChangeReceiver, intentFilter);
}Code language: JavaScript (javascript)

3. Unregister inside onDestroy() (Mandatory!)

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(networkChangeReceiver);
}Code language: CSS (css)

4. Define Receiver Inner Class

class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Network has changed", Toast.LENGTH_LONG).show();
    }
}Code language: JavaScript (javascript)

Leave a Reply

Your email address will not be published. Required fields are marked *