2016/11/26

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

この記事は Android の Wi-Fi 実装に関する情報のまとめ の一部として書かれました

Wi-Fi Access Point を登録する方法です。

コード

以下のように WifiConfiguration を作成し、 WifiManager.addNetwork() で Access Point を登録することが出来ます。

ただし、登録するだけであり、接続は行いません。

返り値の networkId は 入力の WifiConfiguration に矛盾がある場合は -1 が返ってきて失敗を示しますが、それ以外は成功します。 つまり、SSID の存在やパスワードのチェックなどは行われません1

また、端末再起動後も設定を維持するためには WifiManager.saveConfiguration() を実行する必要があります。

2015/3/29 追記
`WifiManager.saveConfiguration()` は Android 8.0 (API 26 Oreo) で Deprecated になりました。 以後は `WifiManager.addNetwork()` を呼ぶと自動的に保存されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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 に変換する方法

パーミッション

WifiManager.addNetwork() を実行するには android.permission.CHANGE_WIFI_STATE パーミッションを AndroidManifest.xml で設定する必要があります。

1
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
  1. 存在しない SSID を指定した場合は「圏外」の Access Point が追加されます 
?

0 件のコメント: