Android で Wi-Fi Access Point に接続する
この記事は Android の Wi-Fi 実装に関する情報のまとめ の一部として書かれました
コード
Wi-Fi Access Point に接続するには WifiManager.enableNetwork()
を使用します。
既に登録済みの Access Point に接続する場合は、WifiManager.getConfiguredNetworks()
を使って WifiConfiguration
を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // 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()
で登録してから使用します。
参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 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 で設定する必要があります。
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" /> |