Android 10 introduced WifiNetworkSpecifier, allowing apps to connect to a specific Wi‑Fi network without modifying the system’s saved networks. This is useful for IoT devices, development boards, or temporary AP connections.
Required Permissions
To control Wi‑Fi connections on Android 10+, location permission is mandatory.
xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Implementing Wi‑Fi Connection with WifiNetworkSpecifier
WifiNetworkSpecifier lets your app request a specific SSID and passphrase. The connection is temporary and only active while your app is running.
java
WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(password)
.build();
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(wifiNetworkSpecifier)
.build();
Handling Connection Events
java
connectivityManager.requestNetwork(networkRequest,
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
connectivityManager.bindProcessToNetwork(network);
}
@Override
public void onUnavailable() {
}
});
「onAvailableメソッドとonUnavailableメソッドをオーバーライドして、接続が成功したかどうかを確認できます。」 (PDFより引用)
Key Implementation Points
WifiNetworkSpecifier
Creates a request specifying SSID and WPA2 passphrase.
requestNetwork
Triggers the OS confirmation dialog. User approval is required before connecting.
bindProcessToNetwork
This is critical. It forces all network traffic (HTTP requests, sockets, etc.) to use the requested Wi‑Fi network.



コメント