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

Android API 31及以上如何使用非废弃接口正确获取WiFi SSID

Android API 31+ 非废弃方法获取WiFi SSID解决方案

问题原因分析

  • 你当前主动调用connectivityManager.getNetworkCapabilities()获取的WifiInfo返回<unknown ssid>,不是权限声明的问题,是主动查询的方式本身存在信息未同步的问题,Android系统仅会在网络状态变更触发回调时,才会在权限满足的前提下完整填充SSID字段。
  • 旧的WifiManager.connectionInfo已在API 31被官方标记为废弃,后续Android版本会逐步移除该接口,不可长期使用。

前置要求

  • 除了你已在Manifest声明的权限外,必须在代码中动态申请ACCESS_FINE_LOCATION运行时权限,获得用户授权后才能正常获取SSID,仅Manifest声明无法满足权限要求。
  • 目标SDK >=33时无需额外新增权限,保持现有声明即可,同时需要确保设备定位开关处于开启状态,Android系统要求获取WiFi SSID必须开启定位功能。

官方推荐实现方案

使用ConnectivityManager.NetworkCallback监听WiFi网络连接状态,在回调中获取SSID,该方法为官方非废弃推荐方案,适配所有Android 12+版本:

import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.net.wifi.WifiInfo

// 声明网络回调实例
private val wifiNetworkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
        super.onCapabilitiesChanged(network, networkCapabilities)
        // 校验当前网络为WiFi传输类型
        if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            val wifiInfo = networkCapabilities.transportInfo as? WifiInfo ?: return
            // 原始SSID默认自带双引号,可按需格式化去除
            val rawSsid = wifiInfo.ssid
            val formattedSsid = rawSsid.removeSurrounding("\"")
            Log.d("DEBUG", "获取到的SSID:$formattedSsid")
        }
    }
}

// 在页面onStart/onCreate生命周期中注册回调
private fun registerWifiCallback() {
    val connectivityManager = getSystemService(ConnectivityManager::class.java)
    // 构建仅监听WiFi网络的请求
    val wifiRequest = NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        .build()
    connectivityManager.registerNetworkCallback(wifiRequest, wifiNetworkCallback)
}

// 在页面onStop/onDestroy生命周期中注销回调,避免内存泄漏
private fun unregisterWifiCallback() {
    val connectivityManager = getSystemService(ConnectivityManager::class.java)
    connectivityManager.unregisterNetworkCallback(wifiNetworkCallback)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:04