2016/11/30

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() で登録してから使用します。

参考

穀風: Android で Wi-Fi Access Point を登録する

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" />

0 件のコメント: