この記事は Android の Wi-Fi 実装に関する情報のまとめ の一部として書かれました
接続切断の方法は2種類ある
Wi-Fi Access Point との接続を切断するには WifiManager.disconnect()
もしくは WifiManager.disableNetwork()
を使用します。
WifiManager.disconnect()
を使用した場合、状態は "Saved"1 になります。
WifiManager.disableNetwork()
を使用した場合、状態は "Disabled"2になります。
"Disabled" といっても、登録してあるパスワード等が消えてしまったわけではありません。
設定画面から "Connect" をクリックしたり、 WifiManager.enableNetwork()
を使用することでパスワード入力無しに再接続することが可能です。
違いはあるようで無い
では何が違うのかというと、自動で 再接続するかどうかのようです。
"Saved" の場合、何らかのタイミングで OS が再接続を試みる可能性がありますが、"Disabled" の場合はユーザー3が意思を持って接続しない限り再接続されません。
ただし、後述のようにデバイスを再起動した場合は "Disabled" でも再接続されるので、完全に無効化するわけではないようです。
参考
Android - What´s the difference between WifiManager disableNetwork() and disconnect() - Stack Overflow
また、"Saved" もどのタイミングで再接続されるのかは不定のようです。
上記のサイトでは WifiManager.disconnect()
を呼んでから数秒後に再接続されたとありますが、
私の Nexus 7 (2012)4 では 一度 "Saved" 状態になると自動で再接続はされませんでした5。
ただし、デバイスを再起動すると接続されます。これは "Disabled" でも同じ。
結局、私の Nexus 7 では、これらの違いがよくわかりませんでした。
コードで Wi-Fi の接続を制御したい場合、勝手に再接続されることはあまり想定しないと思われるので、 WifiManager.disableNetwork()
を使っておくのが無難でしょう。
コード1
WifiManager.disconnect()
を使用する方法です。
1 2 3 | WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
boolean succeeded = wm.disconnect();
|
コード2
WifiManager.disableNetwork()
を使用する方法です。
引数として Network ID が必要ですので、 WifiManager.getConnectionInfo()
を使用して接続している Access Point の情報を取得します。
1 2 3 4 5 | WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wm.getConnectionInfo();
boolean succeeded = wm.disableNetwork(wifiInfo.getNetworkId());
|
未接続状態でも wifiInfo
は null
にならず、Network ID が -1
のインスタンスが返ってきます。
参考
穀風: Android で 接続している Wi-Fi Access Point の情報を取得する
パーミッション
WifiManager.disconnect()
や WifiManager.disableNetwork()
を実行するには android.permission.CHANGE_WIFI_STATE
パーミッションを AndroidManifest.xml で設定する必要があります。
1 | < uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" >
|
また、 WifiManager.getConnectionInfo()
を実行するには android.permission.ACCESS_WIFI_STATE
パーミッションを AndroidManifest.xml で設定する必要があります。
1 | < uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" >
|
- 日本語だと「保存済み」 ↩
- 日本語だと「無効」 ↩
- もしくは、
android.permission.CHANGE_WIFI_STATE
パーミッションを持ったアプリ ↩ - Android 4.4.4 ↩
- 一度 Wi-Fi の圏外に出る等いろいろやってみたのですが ↩
?