Android ネットワーク接続/切断ブロードキャスト監視

これは旧版Android API(Android 7以前)の実装方法です。ブロードキャストレシーバー + ConnectivityManager + NetworkInfoを使用してネットワーク接続と切断を判定します。

1. 核心知識

  1. ConnectivityManager:ネットワーク接続状態管理専用のシステムサービスクラスです。
  2. 権限:AndroidManifest.xmlにネットワーク状態権限を追加する必要があります
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Code language: HTML, XML (xml)
  1. 仕組み:ネットワークに変化が発生するとシステムがネットワークブロードキャストを送信します。BroadcastReceiverのonReceiveコールバック内でConnectivityManagerから現在のネットワーク情報を取得し、接続または切断を判断します。

2. onReceive 完全コード

public void onReceive(Context context, Intent intent) {
    // ネットワーク管理システムサービスを取得
    ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    // アクティブなネットワーク情報を取得(非推奨API)
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null) {
        if (networkInfo.isAvailable()) {
            Toast.makeText(context, "ネットワーク接続", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(context, "ネットワーク切断", Toast.LENGTH_LONG).show();
        }
    } else {
        // networkInfoがnullの場合、ネットワークなし
        Toast.makeText(context, "ネットワーク切断", Toast.LENGTH_LONG).show();
    }
}
Code language: JavaScript (javascript)

3. 重要な注意点(非推奨について)

getActiveNetworkInfo()、NetworkInfo Android 10(API29)で廃止されました

新しいAndroidバージョンではConnectivityManager.NetworkCallbackコールバック方式でネットワーク監視することが推奨され、旧ブロードキャスト+NetworkInfoの記述は推奨されません。

旧方式の欠点

  1. Android 8.0(API26)以降、静的登録されたネットワーク状態ブロードキャストに制限がかかります。静的登録ではネットワーク変化ブロードキャストを受信できず、レシーバーを動的登録する必要があります。
  2. NetworkInfoクラスは廃止済み。新しいOSで直接呼び出すと警告が出たり動作しなくなったりします。

4. ブロードキャストレシーバーの動的登録

// ブロードキャストレシーバー定義
public class NetReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 上記のネットワーク判定コードをここに記述
    }
}
// Activity内で動的登録
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
NetReceiver receiver = new NetReceiver();
registerReceiver(receiver, filter);
Code language: PHP (php)

Android ネットワーク接続/切断ブロードキャスト監視

コメントを残す

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