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 を登録する方法です。

### コード 以下のように `WifiConfiguration` を作成し、 `WifiManager.addNetwork()` で Access Point を登録することが出来ます。 ただし、登録するだけであり、接続は行いません。 返り値の `networkId` は 入力の `WifiConfiguration` に矛盾がある場合は `-1` が返ってきて失敗を示しますが、それ以外は成功します。 つまり、SSID の存在やパスワードのチェックなどは行われません存在しない SSID を指定した場合は「圏外」の Access Point が追加されます。 また、端末再起動後も設定を維持するためには `WifiManager.saveConfiguration()` を実行する必要があります。
2015/3/29 追記
`WifiManager.saveConfiguration()` は Android 8.0 (API 26 Oreo) で Deprecated になりました。 以後は `WifiManager.addNetwork()` を呼ぶと自動的に保存されます。
```java `highlight: [10, 15]; // Activity 等の Context の中で WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); // 以下は WPA の例 WifiConfiguration config = new WifiConfiguration(); config.allowedKeyManagement.set(KeyMgmt.WPA_PSK); config.SSID = '"' + ssid + '"'; config.preSharedKey = '"' + password + '"'; int networkId = wm.addNetwork(config); // 以下を実行すると再起動後も設定が維持される(API 26 Oreo より前のみ必要) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { //noinspection deprecation wm.saveConfiguration(); } ``` 上記の例では WPA の場合に固定しましたが、その他 `WifiConfiguration` の具体的な作成方法は以下を参照ください。 > 参考 > > [穀風: Android で Wi-Fi ScanResult を WifiConfiguration に変換する方法](http://kokufu.blogspot.jp/2016/11/android-wi-fi-scanresult.html) ### パーミッション `WifiManager.addNetwork()` を実行するには `android.permission.CHANGE_WIFI_STATE` パーミッションを AndroidManifest.xml で設定する必要があります。 ```xml ```

0 件のコメント: