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

获取Android热点SSID时触发java.lang.SecurityException权限异常

解决获取WiFi热点SSID时的SecurityException问题

异常原因

你遇到的异常:

java.lang.SecurityException: App not allowed to read or update stored WiFi Ap config (uid = 11529)

本质是普通第三方应用没有权限访问系统的WiFi热点配置。getWifiApConfiguration属于系统隐藏API,仅允许系统应用或拥有系统签名的应用调用,普通应用即使通过反射调用也会被系统权限拦截。


可行解决方案

1. 基础权限申请(仅低版本有效)

在AndroidManifest.xml中添加必要权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

注意:该方案仅在Android 7.1及以下版本可能生效,Android 8.0+对热点配置的访问做了严格限制,普通应用无法绕过。

2. Android 10+ 替代方案

如果应用目标版本是API 29及以上,可以尝试通过ConnectivityManager获取当前活跃的WiFi网络信息(仅能获取当前运行的热点SSID,且前提是热点处于开启状态):

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
Network activeNetwork = connManager.getActiveNetwork();
if (activeNetwork != null) {
    NetworkCapabilities capabilities = connManager.getNetworkCapabilities(activeNetwork);
    if (capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        String ssid = wifiInfo.getSSID().replace("\"", ""); // 去除SSID自带的引号
    }
}

注意:该方法仅能获取设备当前连接的WiFi热点,若要获取自身开启的热点SSID,普通应用依然无法实现。

3. 系统应用/系统签名方式

如果你的应用是系统级应用(比如定制ROM内置应用),可以通过以下步骤解决:

  • 在AndroidManifest.xml中添加系统权限:
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    
  • 使用系统签名对应用进行签名,此时反射调用getWifiApConfiguration即可正常获取热点SSID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:54:20