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" />
```
0 件のコメント:
コメントを投稿