2016/10/20

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


> この記事は [Android の Wi-Fi 実装に関する情報のまとめ](http://kokufu.blogspot.jp/2016/10/android-wi-fi_19.html) の一部として書かれました

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

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

```java
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 機能が現在有効かどうか調べる](http://kokufu.blogspot.jp/2016/10/android-wi-fi_60.html)


### 登録方法1
AndroidManifest.xml に登録する方法

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

```xml

    
        
    

```

### 登録方法2
コードで登録する方法

特定の Activity が起動している間だけ監視したい場合などは、以下のように動的に登録します。

```java
    // 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 件のコメント: