首页 > 解决方案 > 以编程方式连接到之前在 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);
    }
}

标签: androidandroid-10.0

解决方案


推荐阅读