お使いのブラウザは、バージョンが古すぎます。

このサイトは、Internet Explore8・Internet Explore9には対応しておりません。
恐れ入りますが、お使いのブラウザをバージョンアップしていただきますよう宜しくお願いいたします。

【Android】BroadcastReceiverでネットワークの接続状況を監視する

こんにちわ。pencoです。
今回はBroadcastReceiverを使ってネットワークの接続状況を監視する方法について書いていきたいと思います。
 

流れとしては、

  1. ネットワークの接続の変更を通知するBroadcast intentを受信するレシーバを用意する
  2. ネットワークの接続状況を確認する
  3. 状況に応じてActivityにコールバックを返す

こんな感じです。

1. レシーバの用意

 
ではさっそく。
ネットワークの接続の変更を通知するBroadcast intentを受信するレシーバを用意します。コンストラクタの引数については後程説明します。

public class ConnectionReceiver extends BroadcastReceiver {

	public ConnectionReceiver(Observer observer) {
             //コンストラクタ
	}

	@Override
	public void onReceive(Context context, Intent intent) {
//Broadcast intentを受信
	}
}

 
今回はメインのActivityでのみ使用するので、Activityでレシーバの設定をします。
以下のコードをonCreateに書いています。

IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
ConnectionReceiver receiver = new ConnectionReceiver(this);
registerReceiver(receiver, filter);

これでBroadcast intent「android.net.conn.CONNECTIVITY_CHANGE」を受信するレシーバが用意できました。

2. ネットワークの接続状況を確認

 
次にレシーバでネットワーク状況を確認します。
先程作ったレシーバクラスのonReceive()メソッドの中身を変更していきます。

@Override
public void onReceive(Context context, Intent intent) {
	ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
	NetworkInfo info = manager.getActiveNetworkInfo();
	if (info == null) {
		//接続していない
	}else {
		//接続している
	}
}

ネットワークの接続状況を確認するためにConnectivityManagerをSystemServiceから取得します。これを行うためにはマニフェストへのパーミッションの記述が必要です。

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

 
取得したConnectivityManagerを使用してNetworkInfoを取得します。
ネットワーク接続がない場合ではNetworkInfoはnullを返します。

 
これで、接続しているか否かが判断できたので、最後にActivityにコールバックします。

3. 状況に応じてActivityにコールバックを返す

レシーバクラスにコールバック用のinterfaceを追加します。
レシーバクラスの全体はこんな感じです。

public class ConnectionReceiver extends BroadcastReceiver {
	private Observer mObserver;

	public ConnectionReceiver(Observer observer) {
		mObserver = observer;
	}

	@Override
	public void onReceive(Context context, Intent intent) {
		ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo info = manager.getActiveNetworkInfo();
		if (info == null) {
			mObserver.onDisconnect();
		}else {
			mObserver.onConnect();
		}
	}

//----- コールバックを定義 -----
	interface Observer {
		void onConnect();
		void onDisconnect();
	}
}

先程説明を省いたコンストラクタについてですが、
この引数にはコールバックinterfaceを実装したクラスが入ります。
つまり今回はActivityが入ります。
 
レシーバの設定を行う際に以下の様に記述し、コールバック先を自身に設定しているので、ActivityではConnectionReceiver.Observerをimplementsする必要があります。

ConnectionReceiver receiver = new ConnectionReceiver(this);

 
あとはActivityで実装したコールバックメソッドで適宜必要な処理を行います。

@Override
public void onConnect() {
	//ネットワークに接続した時の処理
}

@Override
public void onDisconnect() {
	//ネットワークが切断された時の処理
}

 
本日はここまで。

コメントをどうぞ

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


お気軽にお問い合わせください。

日本VTR実験室では、お仕事のご依頼、ブログ・コラムのご感想などを受け付けております。
アプリ開発・コンテンツ制作でお困りでしたら、お気軽にご相談ください。
ご連絡お待ちしております。

お問い合わせはこちらから

03-3541-1230

info@nvtrlab.jp

電話受付対応時間:平日AM9:30〜PM6:00