android - 以编程方式连接到之前在 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);
}
}