例 – システムブロードキャストを受信する

例 – システムブロードキャストを受信する

一、ブロードキャスト(Broadcast)の基礎概念

1. システムブロードキャストとは何か

  • Androidには多数のシステムレベルブロードキャストが標準搭載されており、システム状態の変化を通知します。
  • よく使われるシステムブロードキャスト:
    • 電池残量低下 / 電池残量変化
    • 起動完了(BOOT_COMPLETED)
    • ネットワーク状態変化(CONNECTIVITY_CHANGE)
    • 機内モード切り替え
    • 時刻・タイムゾーン変更

2. ブロードキャストレシーバーの役割

  • アプリはブロードキャストレシーバーを登録し、監視したいブロードキャストを受け取ります。
  • ブロードキャストが届くと、システムが自動的にレシーバーの onReceive() メソッドを呼び出します。
  • onReceive() 内に業務処理を記述します。

二、ブロードキャストの2種類の登録方法

比較項目動的登録(コードによる登録)静的登録(Manifest登録)
登録箇所Activity / Serviceなどのコンポーネント内AndroidManifest.xml
ライフサイクル登録先コンポーネントに紐づくコンポーネントに依存せず、アプリ未起動でも受信可能
柔軟性高い。随時登録・解除可能低い。インストール時に確定
適用場面コンポーネントのライフサイクルを意識する必要があるブロードキャストグローバルブロードキャスト、起動時起動など
新しいバージョンの制限特別な制限なしAndroid 8.0以降は暗黙的ブロードキャストに多くの制限がある

重要:CONNECTIVITY_CHANGE(ネットワーク変化)ブロードキャストはAndroid 7.0以上で静的登録が許可されていません。動的登録を使用する必要があります。

三、ブロードキャストレシーバーを作成する

基本手順

  1. 新しいクラスを作成し、BroadcastReceiverを継承
  2. onReceive(Context context, Intent intent) メソッドをオーバーライド
  3. onReceive() 内で受信したブロードキャストの処理を記述

コード

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // ブロードキャスト処理
    }
}Code language: PHP (php)

四、動的登録の完全な流れ

1. メンバ変数の定義

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

2. 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. onDestroy()内で登録解除(必須!)

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

4. レシーバー内部クラスを定義

class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "ネットワークが変更されました", Toast.LENGTH_LONG).show();
    }
}Code language: JavaScript (javascript)

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です