问题描述
我正在寻找一种无需传递密码即可连接到 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 (将#修改为@)