public final class WiFi

  1. Object
  2. WiFi

Entry point for inspecting, scanning and connecting to WiFi networks.

The API is split into two tiers:

  1. Information queriesgetCurrentSSID(), getBSSID(), getGateway(), getIp(). These methods read the device’s current network configuration. On modern Android (10+) and iOS the SSID/BSSID queries require runtime permissions or entitlements that the build pipeline injects automatically based on classpath scanning.

  2. Active managementscan() and connect(SSID, password, security). Active management triggers a one-shot scan or attempts to associate the device with a specific network. On Android 10+ this is implemented with NetworkSpecifier; on iOS with NEHotspotConfiguration.

All callbacks are dispatched on the EDT so it is safe to update UI in response to them.

Required permissions

The build pipeline injects the necessary permissions automatically when WiFi is referenced anywhere in the application:

  • Android: ACCESS_WIFI_STATE, CHANGE_WIFI_STATE, ACCESS_NETWORK_STATE, CHANGE_NETWORK_STATE, ACCESS_FINE_LOCATION (required for SSID readout on API 26+), NEARBY_WIFI_DEVICES (API 33+).
  • iOS: com.apple.developer.networking.HotspotConfiguration entitlement for connect, com.apple.developer.networking.wifi-info entitlement for the SSID/BSSID query, and NSLocationWhenInUseUsageDescription (CoreLocation authorization is required since iOS 13 to read SSID).

Methods

public static boolean isInfoSupported()true if the current platform can query WiFi information.
public static boolean isManagementSupported()true if the current platform supports active scan / connect.
public static String getCurrentSSID()The SSID of the currently associated WiFi network, or null if not connected to WiFi or if permission was denied.
public static String getBSSID()The BSSID (MAC address of the access point) of the currently associated WiFi network, formatted as colon-separated lowercase hex (e.g. aa:bb:cc:11:22:33), or null if unavailable.
public static String getGateway()Default gateway IP address as a dotted quad (e.g. 192.168.1.1), or null if no default gateway is configured.
public static String getIp()Local IP address on the WiFi interface as a dotted quad (e.g. 192.168.1.42), or null if WiFi is not active.
public static void scan(WiFiScanCallback callback)Triggers a one-shot WiFi scan and reports results to callback on the EDT.
public static void connect(String ssid, String password, WiFiSecurity security, WiFiConnectCallback callback)Attempts to associate the device with ssid.
public static void disconnect(String ssid)Disconnect the request made via connect.

Inherited methods

Method details

isInfoSupported

public static boolean isInfoSupported()
true if the current platform can query WiFi information.

isManagementSupported

public static boolean isManagementSupported()
true if the current platform supports active scan / connect.

getCurrentSSID

public static String getCurrentSSID()
The SSID of the currently associated WiFi network, or null if not connected to WiFi or if permission was denied. On iOS 13+ the OS returns null unless the app has CoreLocation authorization.

getBSSID

public static String getBSSID()
The BSSID (MAC address of the access point) of the currently associated WiFi network, formatted as colon-separated lowercase hex (e.g. aa:bb:cc:11:22:33), or null if unavailable.

getGateway

public static String getGateway()
Default gateway IP address as a dotted quad (e.g. 192.168.1.1), or null if no default gateway is configured.

getIp

public static String getIp()
Local IP address on the WiFi interface as a dotted quad (e.g. 192.168.1.42), or null if WiFi is not active.

scan

public static void scan(WiFiScanCallback callback)

Triggers a one-shot WiFi scan and reports results to callback on the EDT. The callback receives an array of WiFiNetwork sorted by signal strength (strongest first). Pass null to cancel an in-progress scan.

Behaviour:

  • Android: uses WifiManager.startScan(). On API 28+ the OS throttles scans to 4 per 2 minutes per foreground app; throttled scans return cached results.
  • iOS: not supported – iOS does not expose a public WiFi scan API. callback is invoked with null and error set.
  • Simulator: returns a small synthetic list and prints a warning reminding the developer the data is fabricated.

connect

public static void connect(String ssid, String password, WiFiSecurity security, WiFiConnectCallback callback)

Attempts to associate the device with ssid. password may be null for open networks. security must be one of the WiFiSecurity constants and must match the security mode the access point advertises – a mismatch will cause connect to fail.

Behaviour:

  • Android 10+: uses WifiNetworkSpecifier via ConnectivityManager.requestNetwork(). The OS shows a system dialog asking the user to approve the association; this dialog can’t be bypassed.
  • Android 9 and below: uses the legacy WifiConfiguration API and WifiManager.enableNetwork(). The user is not prompted but the call may be a no-op on OEM builds that removed the API early.
  • iOS 11+: uses NEHotspotConfiguration. The user is shown a system prompt the first time the app tries to join the SSID.
  • Simulator: logs the request and reports a failure.

disconnect

public static void disconnect(String ssid)
Disconnect the request made via connect. On Android 10+ this releases the NetworkSpecifier; on iOS it removes the hotspot configuration. Apps can’t force-disconnect a network the user joined manually.