例 – システムブロードキャストを受信する
一、ブロードキャスト(Broadcast)の基礎概念
1. システムブロードキャストとは何か
- Androidには多数のシステムレベルブロードキャストが標準搭載されており、システム状態の変化を通知します。
- よく使われるシステムブロードキャスト:
- 電池残量低下 / 電池残量変化
- 起動完了(
BOOT_COMPLETED) - ネットワーク状態変化(
CONNECTIVITY_CHANGE) - 機内モード切り替え
- 時刻・タイムゾーン変更
2. ブロードキャストレシーバーの役割
- アプリはブロードキャストレシーバーを登録し、監視したいブロードキャストを受け取ります。
- ブロードキャストが届くと、システムが自動的にレシーバーの
onReceive()メソッドを呼び出します。 onReceive()内に業務処理を記述します。
二、ブロードキャストの2種類の登録方法
| 比較項目 | 動的登録(コードによる登録) | 静的登録(Manifest登録) |
|---|---|---|
| 登録箇所 | Activity / Serviceなどのコンポーネント内 | AndroidManifest.xml |
| ライフサイクル | 登録先コンポーネントに紐づく | コンポーネントに依存せず、アプリ未起動でも受信可能 |
| 柔軟性 | 高い。随時登録・解除可能 | 低い。インストール時に確定 |
| 適用場面 | コンポーネントのライフサイクルを意識する必要があるブロードキャスト | グローバルブロードキャスト、起動時起動など |
| 新しいバージョンの制限 | 特別な制限なし | Android 8.0以降は暗黙的ブロードキャストに多くの制限がある |
重要:
CONNECTIVITY_CHANGE(ネットワーク変化)ブロードキャストはAndroid 7.0以上で静的登録が許可されていません。動的登録を使用する必要があります。
三、ブロードキャストレシーバーを作成する
基本手順
- 新しいクラスを作成し、
BroadcastReceiverを継承 onReceive(Context context, Intent intent)メソッドをオーバーライド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)
Previous: Androidブロードキャストを理解する