Android13/API33获取WiFi SSID返回UNKNOWN_SSID的问题求助
解决WiFi SSID返回UNKNOWN_SSID的问题
可能的原因及修复步骤
1. 权限与系统配置检查
虽然你已核对基础权限,但仍需注意细节:
- Android 10(API 29)及以上版本,必须打开手机系统定位开关,否则即使权限通过,也会返回UNKNOWN_SSID。
- Android 12(API 31)+ 要求应用必须在前台持有定位权限(
ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION),后台定位权限无法满足获取SSID的要求。 - 确保
AndroidManifest.xml权限声明完整:<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2. 替换获取WifiInfo的方式
当前使用ConnectivityManager的写法存在兼容性风险,建议直接通过WifiManager获取:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); String ssid = wifiInfo.getSSID(); // 处理SSID自带的双引号包裹问题 if (ssid != null && ssid.startsWith("\"") && ssid.endsWith("\"")) { ssid = ssid.substring(1, ssid.length() - 1); } }
3. 验证网络类型有效性
getActiveNetwork()可能返回移动数据网络,此时无法获取有效WifiInfo,需先判断网络传输类型:
ConnectivityManager cm = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); Network netnow = cm.getActiveNetwork(); if (netnow != null) { NetworkCapabilities capabilities = cm.getNetworkCapabilities(netnow); if (capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { WifiInfo wf = (WifiInfo) capabilities.getTransportInfo(); String ssid = wf.getSSID(); } }
4. 特殊场景排查
- 若连接的是隐藏SSID的WiFi网络,系统会直接返回UNKNOWN_SSID,这是系统限制,无法获取真实SSID。
- 部分定制ROM可能有额外权限管控,需在应用权限设置中确认“位置信息”权限设为“始终允许”或“使用时允许”,避免后台权限受限导致获取失败。
内容的提问来源于stack exchange,提问作者hengji
相关产品推荐
相关产品推荐

