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

问题描述

在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);
            }
    });
}

调用方法几秒钟后,操作系统将显示以下弹出窗口:

Device to use with app

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

请问如何解决此问题?

解决方法

几天前,我在Andrdoid Q上进行wifi连接,这是我在stackOverflow中提出的问题的link

因此,解决方案是使用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();
}