2016/11/30
Android で Wi-Fi Access Point に接続する
> この記事は [Android の Wi-Fi 実装に関する情報のまとめ](http://kokufu.blogspot.jp/2016/10/android-wi-fi_19.html) の一部として書かれました ### コード Wi-Fi Access Point に接続するには `WifiManager.enableNetwork()` を使用します。 既に登録済みの Access Point に接続する場合は、`WifiManager.getConfiguredNetworks()` を使って `WifiConfiguration` を取得します。 ```java `highlight: 13; // Activity 等の Context の中で WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); // targetSsid が既に登録済みの場合 WifiConfiguration targetConfig = null; for (WifiConfiguration config : wm.getConfiguredNetworks()) { if (config.SSID.equals('"' + targetSsid + '"')) { // Quote を取る方向の方が正しいかもしれないが、わかりやすさ重視で targetConfig = config; break; } } if (targetConfig != null) { wm.enableNetwork(targetConfig.networkId, true); } else { // 登録されてなかった } ``` まだ登録されていない Access Point の場合は `WifiManager.addNetwork()` で登録してから使用します。 > 参考 > > [穀風: Android で Wi-Fi Access Point を登録する](http://kokufu.blogspot.jp/2016/11/android-wi-fi-access-point_26.html) ```java `highlight: 16; // Activity 等の Context の中で WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); // targetSsid が未登録の場合は新規登録を先に行う // 以下は WPA の例 WifiConfiguration targetConfig = new WifiConfiguration(); targetConfig.allowedKeyManagement.set(KeyMgmt.WPA_PSK); targetConfig.SSID = '"' + targetSsid + '"'; targetConfig.preSharedKey = '"' + password + '"'; // 以下を実行しても targetConfig.networkId は更新されないので // 返り値の networkId を使う int networkId = wm.addNetwork(targetConfig); if (networkId != -1) { wm.enableNetwork(networkId, true); } else { // 登録失敗 } ``` ### パーミッション `WifiManager.enableNetwork()` を実行するには `android.permission.CHANGE_WIFI_STATE` パーミッションを AndroidManifest.xml で設定する必要があります。 ```xml <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> ``` また、 `WifiManager.getConfiguredNetworks()` を実行するには `android.permission.ACCESS_WIFI_STATE` パーミッションを AndroidManifest.xml で設定する必要があります。 ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> ```