使用 Android 10 以编程方式连接到 WiFi 接入点

Connect to WiFi Access Point programmatically with Android 10

使用 Android 10,我使用以下方法连接到我的 Wifi 接入点:

@RequiresApi(api = Build.VERSION_CODES.Q)
public static void connectToWifiAccessPoint(String AP_SSID, String AP_PASSWORD, ConnectivityManager connectivityManager) {

    WifiNetworkSpecifier.Builder builder = null;
    builder = new WifiNetworkSpecifier.Builder();

    builder.setSsid(AP_SSID);
    builder.setWpa2Passphrase(AP_PASSWORD);

    WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
    NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
    networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);
    NetworkRequest networkRequest = networkRequestBuilder.build();

    connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                super.onAvailable(network);
                connectivityManager.bindProcessToNetwork(network);
            }
    });
}

调用此方法几秒钟后,OS 显示此弹出窗口:

点击连接按钮后,几秒钟后出现相同的弹出窗口,然后 智能手机仍未连接到接入点。

知道如何解决这个问题吗?

我几天前在 Andrdoid Q 上遇到 wifi 连接问题, 我在 Whosebug 中的问题。

因此,解决方案是使用 targetSdkVersion 28 编译您的应用。 要连接到 wifi,请使用此功能:

 public void connectToWifi(String ssid, String key) {

    Log.e(TAG, "connection wifi pre Q");
    WifiConfiguration wifiConfig = new WifiConfiguration();
    wifiConfig.SSID = "\"" + ssid + "\"";
    wifiConfig.preSharedKey = "\"" + key + "\"";
    int netId = wifiManager.addNetwork(wifiConfig);
    if (netId == -1) netId = getExistingNetworkId(wifiConfig.SSID);

    wifiManager.disconnect();
    wifiManager.enableNetwork(netId, true);
    wifiManager.reconnect();
}

尝试从保存的网络中忘记 wifi 接入点