2016/12/03
Android で Wi-Fi Access Point との接続状態変化をイベントとして取得する
この記事は Android の Wi-Fi 実装に関する情報のまとめ の一部として書かれました
Wi-Fi の接続状態をイベントとして取得するには "android.net.wifi.STATE_CHANGE"
action を監視する BroadcastReceiver
を使います。
"android.net.wifi.WIFI_STATE_CHANGED"
という action もありますが、こちらは、Wi-Fi 機能の状態変化を見るものです。
非常に紛らわしいので注意が必要です。
参考
BroadcastReceiver のコード
NetworkInfo
が Extra として渡されるので、接続状態を確認することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class WifiConnectionWatcher extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { // "android.net.wifi.STATE_CHANGE" NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); switch (info.getState()) { case DISCONNECTED: break ; case SUSPENDED: break ; case CONNECTING: break ; case CONNECTED: break ; case DISCONNECTING: break ; case UNKNOWN: Log.e(TAG, "Wifi connection state is UNKNOWN" ); break ; default : Log.e(TAG, "Wifi connection state is OTHER" ); break ; } } } } |
参考
登録方法1
AndroidManifest.xml に登録する方法
常に変化を監視したい場合は、以下のように BroadcastReceiver
を AndroidManifest.xml に追記します。
1 2 3 4 5 | < receiver android:name = ".WifiConnectionWatcher" > < intent-filter > < action android:name = "android.net.wifi.STATE_CHANGED" /> </ intent-filter > </ receiver > |
登録方法2
コードで登録する方法
特定の Activity が起動している間だけ監視したい場合などは、以下のように動的に登録します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Activity 等の Context の中で WifiConnectionWatcher mWifiConnectionWatcher = new WifiConnectionWatcher(); @Override protected void onResume() { super .onResume(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); // "android.net.wifi.STATE_CHANGE" registerReceiver(mWifiConnectionWatcher, intentFilter); } @Override protected void onPause() { super .onPause(); unregisterReceiver(mWifiConnectionWatcher); } |
パーミッション
このコードを実行するのに特別なパーミッションは必要ありません。
0 件のコメント:
コメントを投稿