首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WifiManager.disconnect()在Android中被弃用

WifiManager.disconnect()在Android中被弃用
EN

Stack Overflow用户
提问于 2020-10-22 16:55:24
回答 1查看 1.9K关注 0票数 1

在Android和更高版本(API >= 29)中,WifiManager.disconnect()方法被弃用了

在Android 10及以上的系统中,断开Wi网络的解决方案是什么?

我已经实现了下一个代码,但是它始终失败:无效

我想失败的原因可能是removeNetworkSuggestions可能会与addNetworkSuggestions一起工作,但我不需要添加任何网络来断开与活动网络的连接。

代码语言:javascript
运行
复制
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();
        }
    }
}

我在清单中具有在运行时授予的所需权限:

代码语言:javascript
运行
复制
<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" />
EN

回答 1

Stack Overflow用户

发布于 2022-09-14 13:29:44

我为此挣扎了一段时间。最好的做法是让Android系统按照以下目的来处理它。

startActivity(new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY));

这将显示用户位置周围的许多WiFi SSID,并且它们能够选择要连接到的WiFis之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64486967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档