2013年6月12日水曜日

Android ネットワークの状態変化の検出(リアルタイムなど)

前回, Android ネットワークの状態の検出 という題で, コードからネットワークの接続状態を検出するコードを書きました。


今回は, ネットワークの状態変化を検出し, 落ちたのか接続したのかを確認します。

○検出用のBroadcastReceiver をつくる

まずBroadcastReceiverクラスを拡張して, 状態変化が起こった場合に, ネットワークの状態を検出し, その状態を取得します( 状態取得方法は, こちら のコードを使っています )

public class NetworkConnectionReceiver extends BroadcastReceiver 
{
 //private static String TAG = "NetworkConnectionReceiver";
 
 @Override
 public void onReceive(Context context, Intent intent) 
 {
  ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  boolean connect = NetworkConnection.isConnected(manager);
  
  //String message = connect ? "Connect" : "Disconnect";
  //Log.d(TAG, message);
  //Toast.makeText(context, message, Toast.LENGTH_LONG).show();
 }

}

コメントアウトの部分を外すと, Logを残したりします。
コードはこれだけです。


○アプリケーション全体で検出をする場合

AndroidManifest.xml で, BroadcastReceiver を登録しましょう。


   
      
   


ポイントは, android.net.conn.CONNECTIVITY_CHANGE です。

さて, テストですが, アプリをバックグラウンドで動かしたまま, wifi 設定などをoff にすると, Logcat で見れたりなんかします。


○特定のActivity 内で検出する場合

特定のActivity 内で変化が起きたときのみ検出する場合は, Activity内で, インスタンス化して登録します。 さらに, UI とからめたりする場合は, inner クラスで定義すべし。

コードで登録する場合はこんな感じです。

NetworkConnectionReceiver receiver = new NetworkConnectionReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(receiver, intentFilter);  








0 件のコメント:

コメントを投稿