Android で登録済みの Wi-Fi Access Point を登録解除する
この記事は Android の Wi-Fi 実装に関する情報のまとめ の一部として書かれました
登録してある Wi-Fi Access Point を未登録状態に戻す方法です。
コード
WifiManager.removeNetwork()
で Access Point の登録解除をすることが出来ます。
この時、Network Id が必要になるので、 WifiManager.getConfiguredNetworks()
を用いて取得すると良いでしょう1。
返り値は成否を表す bool 値です。 下の例では省いていますが、実際には成否判定で処理を分けた方が良いでしょう。
また、端末再起動後も設定を維持するためには WifiManager.saveConfiguration()
を実行する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Activity 等の Context の中で WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); List<WifiConfiguration> configurations = wm.getConfiguredNetworks(); if (configurations != null ) { for (WifiConfiguration config : configurations) { if (config.SSID.equals( '"' + targetSsid + '"' )) { // 本当は Quote を取る方向で実装した方が良いがわかりやすさ重視で // 本来は返り値を判定した方が良い wm.removeNetwork(config.networkId); break ; } } } // 以下を実行すると再起動後も設定が維持される(API 26 Oreo より前のみ必要) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { //noinspection deprecation wm.saveConfiguration(); } |
パーミッション
WifiManager.removeNetwork()
を実行するには android.permission.CHANGE_WIFI_STATE
パーミッションを AndroidManifest.xml で設定する必要があります。
1 | < uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" /> |
また、WifiManager.getConfiguredNetworks()
を実行するには android.permission.ACCESS_WIFI_STATE
パーミッションを AndroidManifest.xml で設定する必要があります。
1 | < uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" /> |
Android 6.0 以降は自分の追加した network しか登録解除できないので注意
2017/2/21 追記
Android 6.0 (API 23 Marshmallow) の変更で、自分の追加した Wi-Fi Network 以外は変更・解除ができなくなりました。
それ以外を登録解除しようとすると WifiManager.removeNetwork()
を実行しても false
が返り、ログには以下のように表示されてしまいます2。
W/WifiStateMachine: Not authorized to remove network cnid=0 uid=10099
参考
0 件のコメント:
コメントを投稿