2016/10/20

Android で Wi-Fi 機能の有効・無効の変化をイベントとして取得する

この記事は Android の Wi-Fi 実装に関する情報のまとめ の一部として書かれました

Wi-Fi の状態変化を知るためには "android.net.wifi.WIFI_STATE_CHANGED" action を監視する BroadcastReceiver を使います。

BroadcastReceiver のコード

WifiManager.getWifiState() で取得できる状態に変化が起こった場合に呼ばれるコードです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class WifiStateWatcher extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { // "android.net.wifi.WIFI_STATE_CHANGED"
            // 変化前の状態を取得
            int previousState = intent.getIntExtra(
                    WifiManager.EXTRA_PREVIOUS_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
 
            // 変化後の状態を取得
            int state = intent.getIntExtra(
          WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
 
            // 取得できるのは以下の状態
            // WifiManager.WIFI_STATE_DISABLED
            // WifiManager.WIFI_STATE_DISABLING
            // WifiManager.WIFI_STATE_ENABLED
            // WifiManager.WIFI_STATE_ENABLING
            // WifiManager.WIFI_STATE_UNKNOWN
        }
    }
}

参考

穀風: Android で Wi-Fi 機能が現在有効かどうか調べる

登録方法1

AndroidManifest.xml に登録する方法

常に変化を監視したい場合は、以下のように BroadcastReceiver を AndroidManifest.xml に追記します。

1
2
3
4
5
<receiver android:name=".WifiStateWatcher">
    <intent-filter>
        <action android:name="android.net.wifi.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 の中で
WifiStateWatcher mWifiStateWatcher = new WifiStateWatcher();
 
@Override
protected void onResume() {
    super.onResume();
 
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); // "android.net.wifi.WIFI_STATE_CHANGED"
 
    registerReceiver(mWifiStateWatcher, intentFilter);
}
 
@Override
protected void onPause() {
    super.onPause();
 
    unregisterReceiver(mWifiStateWatcher);
}

パーミッション

このコードを実行するのに特別なパーミッションは必要ありません。

0 件のコメント: