@RequiresApi(api = Build.VERSION_CODES.Q)
public void openSystemDialogToConnectToWifi(String ssid, ConnectivityManager.NetworkCallback callback) {
WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
builder.setSsid(ssid);
builder.setWpa2Passphrase("secret");
WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED);
networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);
NetworkRequest networkRequest = networkRequestBuilder.build();
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
cm.requestNetwork(networkRequest, callback);
}
Это код, который я использую, чтобы подключиться к новому Wi-Fi из моего приложения. Я получаю IP-адрес, символ Wi-Fi очень кратко виден в строке состояния. В следующий момент Wifi-Symbol исчезает, и снова отображается системный диалог для подключения к Wi-Fi.
Когда я отлаживаю обратный вызов, он выполняет методы, описанные в этом порядке:
- onAvailable
- onCapabilitiesChanged
- onBlockedStatusChanged (заблокирован: false)
- onCapabilitiesChanged
- onLost
все методы делают ничего (просто вызовите super.method ())
Оборудование: OnePLus 6 с Android Q