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

Android App如何获取WiFi网络列表?替代已弃用API及搜索特定网络

替代已弃用API获取WiFi网络列表的方案

从Android 10(API 29)开始,WiFiManager.startScan()被正式弃用,官方推荐使用WifiManager.registerScanResultsCallback()来获取WiFi扫描结果,以下是具体实现方案,以及如何搜索特定前缀的网络。

一、获取WiFi网络列表的替代实现

1. 声明必要权限

在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- Android 12+ 必需 -->

注意:位置权限属于危险权限,需在代码中动态申请,且必须开启系统位置服务才能获取扫描结果。

2. 注册扫描结果回调

通过registerScanResultsCallback监听系统WiFi扫描结果,无需手动调用startScan():

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

// 创建扫描回调
val scanCallback = object : WifiManager.ScanResultsCallback() {
    override fun onScanResultsAvailable() {
        // 获取最新扫描结果
        val scanResults = wifiManager.scanResults
        // 遍历处理网络信息
        scanResults.forEach { result ->
            val ssid = result.SSID
            val bssid = result.BSSID
            val signalStrength = result.level
            // 此处可将数据绑定到UI列表展示
        }
    }
}

// 注册回调,使用主线程执行结果回调
wifiManager.registerScanResultsCallback(applicationContext.mainExecutor, scanCallback)

3. 销毁时注销回调

避免内存泄漏,在页面销毁或不再需要监听时注销:

override fun onDestroy() {
    super.onDestroy()
    wifiManager.unregisterScanResultsCallback(scanCallback)
}

二、搜索特定前缀的WiFi网络

获取到ScanResults列表后,直接通过字符串过滤即可:

val targetPrefix = "ABCD"
val filteredNetworks = scanResults.filter { result ->
    // 注意处理SSID为空的隐藏网络
    result.SSID.isNotEmpty() && result.SSID.startsWith(targetPrefix)
}
// 处理过滤后的目标网络,比如展示到UI或发起连接

关键注意事项

  • 位置服务依赖:Android 10及以上,必须授予位置权限并开启系统位置服务,否则无法获取扫描结果。
  • 后台限制:Android 12及以上,后台应用获取WiFi扫描结果会被严格限制,仅前台应用能正常获取。
  • 隐藏网络:部分隐藏网络的SSID为空字符串,过滤时需做非空判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:03:15