[ Andorid ]

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

Android

こんにちわ。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() {
	//ネットワークが切断された時の処理
}

 
本日はここまで。

執筆者

最近の投稿

  • Android 2014.08.29. Andorid

    【Android】TextViewの文字装飾を行う時に気を付けたいこと

  • device-2014-08-13-123130 2014.08.15. Andorid

    【Android】続・TableLayoutでExcelっぽい表を作る:長文のレイアウト崩れを解消!

  • Android 2014.08.01. Andorid

    【Android】TableLayoutでExcelっぽい表を作る

  • Android 2014.07.18. Andorid

    【Android】画面下側からTabっぽいものを表示させてみる

関連記事もどうぞ

  • russia-95311_1280-compressor 2014.10.29. アプリ開発日記

    BtoBアプリ設計時は「ユーザーリテラシーの差」に気をつけたいと思った次第

  • chromeerror 2014.10.03. その他

    「ホストを解決しています」をズバっと解決する

  • Android 2014.09.19. Andorid

    In-app Billing Version 2サポート終了のお知らせが届いた

  • Xcode 2014.09.08. iOS

    UIRefreshControlを使って更新処理

定期購読のお知らせ

最後まで読んでいただきましてありがとうございます!日本VTR実験室の定期購読は、Twitter、Facebook、RSSから!

コメントする


× 一 = 2

購読のお知らせ

ブログ記事カテゴリー

ブログ記事タグ

Twitter

ストアアプリ制作実績

  • icon_512
  • icon_300dpi
  • WiZ! PREZM
  • お前だからできたんだ