2016/11/26

Android で登録済みの Wi-Fi Access Point を登録解除する


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

登録してある Wi-Fi Access Point を未登録状態に戻す方法です。

### コード `WifiManager.removeNetwork()` で Access Point の登録解除をすることが出来ます。 この時、Network Id が必要になるので、 `WifiManager.getConfiguredNetworks()` を用いて取得すると良いでしょう取得方法は他にもありますが、最も単純なものを選びました。 返り値は成否を表す bool 値です。 下の例では省いていますが、実際には成否判定で処理を分けた方が良いでしょう。 また、端末再起動後も設定を維持するためには `WifiManager.saveConfiguration()` を実行する必要があります。 ```java `highlight: 7; // Activity 等の Context の中で WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); for (WifiConfiguration config : wm.getConfiguredNetworks()) { if (config.SSID.equals('"' + targetSsid + '"')) { // 本当は Quote を取る方向で実装した方が良いがわかりやすさ重視で // 本来は返り値を判定した方が良い wm.removeNetwork(config.networkId); break; } } // 以下を実行すると再起動後も設定が維持される wm.saveConfiguration(); ``` ### パーミッション `WifiManager.removeNetwork()` を実行するには `android.permission.CHANGE_WIFI_STATE` パーミッションを AndroidManifest.xml で設定する必要があります。 ```xml ``` また、`WifiManager.getConfiguredNetworks()` を実行するには `android.permission.ACCESS_WIFI_STATE` パーミッションを AndroidManifest.xml で設定する必要があります。 ```xml ``` ### Android 6.0 以降は自分の追加した network しか登録解除できないので注意 > 2017/2/21 追記 Android 6.0 の変更で、自分の追加した Wi-Fi Network 以外は変更・解除ができなくなりました。 それ以外を登録解除しようとすると `WifiManager.removeNetwork()` を実行しても `false` が返り、ログには以下のように表示されてしまいますcnid は network id, uid はアプリの user id です。 ``` W/WifiStateMachine: Not authorized to remove network cnid=0 uid=10099 ``` > 参考 > - [Android 6.0 Marshmallow以降のWifiConfigurationを眺める - Androidのメモとか](http://relativelayout.hatenablog.com/entry/2016/10/19/223546) > - [Android で Wi-Fi Access Point を登録する | 穀風](https://kokufu.blogspot.jp/2016/11/android-wi-fi-access-point_26.html)

0 件のコメント: