以编程方式在 Android Q 中连接到之前连接的 Wifi

问题描述

我正在寻找一种无需传递密码即可连接到 wifi 的方法,随着 wifiManager.enableNetwork API 的弃用,我还没有找到从 wifi 切换到 wifi 的方法我有一个扫描的 wifi 列表,想连接到网络,SSID 已知。请帮忙。

// 恢复已知网络的方法

private String restoreDefaultConnection(final String defaultSSID) {
    List<ScanResult> scanResults = wifiManager.getScanResults();
    for (ScanResult item : scanResults) {
        Log.d(TAG,"SSID::" + item.SSID + " BSSID:" + item.BSSID);
        if (defaultSSID.equals("\"" + item.SSID + "\"")) {
            Log.d(TAG,"Found default wifi");
            connectToNetwork(item.SSID,null);
        } else {
            Log.d(TAG,"No wifi SSID found for default network");
        }
    }
}

// 连接网络的方法

public void connectToNetwork(final String networkSSID,final String networkPass) {
    Log.d(TAG,"Connecting to Wi-Fi network: " + networkSSID);
    WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
    builder.setSsid(networkSSID);
    if (networkPass != null) builder.setWpa2Passphrase(networkPass);

    WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
        networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);
        }
        NetworkRequest networkRequest = networkRequestBuilder.build();
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                super.onAvailable(network);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) cm.bindProcesstoNetwork(network);
            }

            @Override
            public void onUnavailable() {
                Log.d(TAG,"App Could not connect to wifi");
                super.onUnavailable();
            }
        };
        cm.requestNetwork(networkRequest,networkCallback);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)