酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Androidでネットワーク接続状態が変わったイベントを取得する(接続状態の変化を検出する)

ACCESS_NETWORK_STATEの権限が必要なのでマニフェスト(AndroidManifest.xml)でパーミッションの追加をおこないます。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

次にマニフェストにレシーバーの設定をおこないます。android.net.conn.CONNECTIVITY_CHANGEを拾えるようにします。

<receiver android:name=".ConnectivityReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

BroadcastReceiverを継承したConnectivityReceiverという名前の接続状態の変化を受け取るレシーバークラスを実装します。

package jp.ch3cooh.samples;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * 接続状態の変化を受け取るレシーバークラス
 */
public class ConnectivityReceiver extends BroadcastReceiver {
    private static final String TAG = ConnectivityReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();

        boolean isConnected = (networkInfo != null && networkInfo.isConnected());
        if (isConnected) {
            // 接続状態
        } else {
            // 切断状態
        }
    }
}