You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PAX A920设备(Android Lollipop,SDK22)下NetworkInfo与WifiConfiguration弃用问题及替代方法咨询

解答你的疑问:已弃用API的官方示例问题与替代方案

为什么SDK22官方示例还在用已弃用的类?

其实Android的API弃用机制是这样的:当一个API被标记为@Deprecated,并不意味着它在当前SDK版本中不能用,而是Google在提醒开发者——这个API在未来的Android版本中会被移除,推荐使用新的替代API来保证代码的长期兼容性。

SDK22(Android 5.1)属于比较早期的版本,这些类(NetworkInfo、WifiConfiguration)在当时已经被标记为弃用,但官方的示例代码可能没有及时更新到最新的推荐写法。毕竟示例的主要目的是展示功能实现,而不是强制使用最新API,所以你会看到示例中仍在使用这些已标记弃用的类。

替代已弃用API的具体方案

针对你当前的两个方法,这里给出兼容SDK22的替代实现:

1. 替换isWifiConnected()(替代NetworkInfo)

可以使用ConnectivityManager.getNetworkCapabilities()和NetworkCapabilities来判断WiFi连接状态,这是API21+引入的推荐方式:

public boolean isWifiConnected() {
    boolean isWifiConnected = false;
    try {
        // 获取当前活跃网络
        Network activeNetwork = connectivityManager.getActiveNetwork();
        if (activeNetwork != null) {
            NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork);
            // 检查是否是WiFi传输且已连接
            isWifiConnected = networkCapabilities != null 
                    && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                    && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CONNECTED);
        }
        Log.i(TAG, "wifi adapter is connected? " + isWifiConnected);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return isWifiConnected;
}

如果需要检查所有WiFi网络(不止活跃的),可以遍历所有网络:

public boolean isAnyWifiConnected() {
    boolean isWifiConnected = false;
    try {
        Network[] allNetworks = connectivityManager.getAllNetworks();
        for (Network network : allNetworks) {
            NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
            if (capabilities != null 
                    && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                    && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CONNECTED)) {
                isWifiConnected = true;
                break;
            }
        }
        Log.i(TAG, "any wifi adapter is connected? " + isWifiConnected);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return isWifiConnected;
}

2. 替换removeNetwork()(替代WifiConfiguration)

在SDK22到API28之间,WifiConfiguration虽然被标记为弃用,但仍然可以使用。如果要适配更高版本(API29+),Google推荐使用WifiNetworkSuggestion和相关方法,但针对你的SDK22环境,这里给出兼容的优化写法,同时也说明未来的替代方向:

兼容SDK22的写法(仍可使用,但注意未来版本)

public void removeNetwork() {
    List<WifiConfiguration> wifiCfgList = wifiManager.getConfiguredNetworks();
    if (wifiCfgList != null && !wifiCfgList.isEmpty()) { // 增加空判断,避免空指针
        for (WifiConfiguration item : wifiCfgList) {
            if (item != null) {
                wifiManager.removeNetwork(item.networkId);
            }
        }
        // 注意:saveConfiguration()在API26已弃用,SDK22中可以用,但更高版本不需要调用
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1) {
            wifiManager.saveConfiguration();
        }
    }
}

API29+的替代方案(供未来升级参考)

如果后续升级到更高版本,需要使用WifiManager.removeNetworkSuggestions()来移除推荐的WiFi网络,示例如下:

public void removeNetworkSuggestions() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        List<WifiNetworkSuggestion> suggestions = new ArrayList<>();
        // 这里需要构造要移除的WifiNetworkSuggestion对象,匹配要删除的网络
        WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
                .setSsid("YourWiFiSSID")
                .build();
        suggestions.add(suggestion);
        
        int result = wifiManager.removeNetworkSuggestions(suggestions);
        if (result == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
            Log.i(TAG, "WiFi suggestion removed successfully");
        } else {
            Log.e(TAG, "Failed to remove WiFi suggestion");
        }
    }
}

总结

  • 官方示例未更新是因为弃用不代表当前版本不可用,只是提醒未来替换;
  • 在SDK22环境下,使用NetworkCapabilities替代NetworkInfo是安全且推荐的;
  • WifiConfiguration在SDK22仍可使用,但注意saveConfiguration()在API26后已弃用,需要做版本判断。

内容的提问来源于stack exchange,提问作者Sabrina N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:47:52