2010年10月03日

[android] WiFi接続時にオンライン処理を起動する

WIFIに接続した時、オンライン処理を実行する方法です。

IntentFilterの設定
WiFiの接続状態が変更された時にNETWORK_STATE_CHANGED_ACTIONのインテントが投げられるので、IntentFilterで受け取ります

  
    
  


Permissionの設定
NETWORK_STATE_CHANGED_ACTIONのインテントを受け取るにはACCESS_WIFI_STATEのパーミッションが必要です


Receiverの処理
NETWORK_STATE_CHANGED_ACTIONインテントのExtra(WifiManager.EXTRA_NETWORK_INFO)に変更後のNetworkInfoが格納されています。NetworkInfo内のスタータスがCONNECTEDになっているかを判定します。(注:Statusで処理するよりも.isConnected()を使う方が正確かもしれません)
public class WifiReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
      Bundle extras = intent.getExtras();
      if (extras != null) {
        NetworkInfo info = extras.getParcelable(WifiManager.EXTRA_NETWORK_INFO);
        if (info != null) {
          if (nwInfo.getState().equals(NetworkInfo.State.CONNECTED)) {
            // サービス呼び出し(WIFI接続時のオンライン処理)
            context.startService(new Intent(context, MyService.class));
          }
        }
      }
    }
  }
}

「Statusで処理するよりも.isConnected()を使う方が正確かもしれません」と記載しましたが、NetworkInfoクラスのソースを確認したところ、どちらも同じ動作をするようです。isConnected()を使った方が可読性が高いですね。

NetworkInfoクラスのgetState()メソッド
public State getState() {
  return mState;
}

NetworkInfoクラスのisConnected()メソッド
public boolean isConnected() {
  return mState == State.CONNECTED;
}
posted by meloncake at 23:24| Comment(0) | TrackBack(0) | Android
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/41086354

この記事へのトラックバック