在Android和更高版本(API >= 29)中,WifiManager.disconnect()方法被弃用了。
在Android 10及以上的系统中,断开Wi网络的解决方案是什么?
我已经实现了下一个代码,但是它始终失败:无效。
我想失败的原因可能是removeNetworkSuggestions可能会与addNetworkSuggestions一起工作,但我不需要添加任何网络来断开与活动网络的连接。
public final class WifiUtils {
private static final String TAG = "WifiUtils";
public static void disconnect(final Context context) {
// Sanity check
if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) {
// Without the <Fine location> permission the returned SSID is always: '<unknown ssid>'.
// Note: The <Coarse location> permission is not enough.
Log.e(WifiUtils.TAG, "Missing <ACCESS_FINE_LOCATION> permission. Required to obtain the Wifi SSID.");
return;
}
final WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
if (!manager.isWifiEnabled())
return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
final WifiInfo wifiInfo = manager.getConnectionInfo();
if (wifiInfo == null) {
Log.w(WifiUtils.TAG, "Failed to get connection details.");
return;
}
final String ssid = wifiInfo.getSSID();
if (TextUtils.isEmpty(ssid)) {
Log.e(WifiUtils.TAG, "Unable to resolve Wifi SSID.");
} else {
Log.i(WifiUtils.TAG, "Resolved Wifi SSID: " + ssid);
final List<WifiNetworkSuggestion> suggestions = new ArrayList<>();
suggestions.add(new WifiNetworkSuggestion.Builder()
.setSsid(wifiInfo.getSSID())
.build());
final int status = manager.removeNetworkSuggestions(suggestions);
Log.d(WifiUtils.TAG, "Wifi disconnection status result: " + status);
}
} else {
manager.disconnect();
}
}
}
我在清单中具有在运行时授予的所需权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
发布于 2022-09-14 13:29:44
我为此挣扎了一段时间。最好的做法是让Android系统按照以下目的来处理它。
startActivity(new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY));
这将显示用户位置周围的许多WiFi SSID,并且它们能够选择要连接到的WiFis之一。
https://stackoverflow.com/questions/64486967
复制相似问题