Connect to a Specific Wi‑Fi Network on Android 10+ (WifiNetworkSpecifier)

Android Development

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.

コメント