当WIFI连接成功时获取SSID

86

当我的安卓设备连接到WIFI时,我想获得WIFI网络的SSID。

我已经注册了一个BroadcastReceiver监听android.net.wifi.supplicant.CONNECTION_CHANGE事件。当WIFI被断开或重新连接时,我会收到通知。但是,我无法获取网络的SSID。

我正在使用以下代码查找SSID:

WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();

我得到了字符串<未知SSID>而不是SSID。

这些是清单中的权限(我添加了ACCESS_NETWORK_STATE只是为了检查,实际上我不需要它)。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
为什么会发生这种情况?我如何获取实际的SSID?是广播提前触发了,还是在连接建立之前?是否有其他广播可以侦听?我只对WIFI连接感兴趣,不关心3G连接。
更新:我刚刚检查过,wifiInfo.getBSSID()返回null。

有趣的是,文档中指出如果连接不可用,应该从getSSID()接收到null,因此我认为这不是连接问题。只是想知道,您测试的网络的SSID是什么? - Ben Siver
详细状态和请求者状态是什么? - Eric Woodruff
1
@Ben S,检查我在问题中提供的链接,<unknown ssid>是Android 4.2的行为,可能也适用于更新版本。这是一个Android的bug。 - zmbq
谢谢澄清。 - Ben Siver
试试这个 Stack Overflow 的答案。https://dev59.com/iVUL5IYBdhLWcg3wqpo7#51518480 - Yaswant Narayan
11个回答

-3

Android 9 SSID 显示为 NULL 值,请使用此代码...

ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo.isConnected()) {
            WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            wifiInfo.getSSID();
            String name = networkInfo.getExtraInfo();
            String ssid = wifiInfo.getSSID();
            return ssid.replaceAll("^\"|\"$", "");
        }

请考虑添加一些解释,说明您的代码正在做什么以及为什么它是正确的。 - tung
NetworkInfo.isConnected和getExtraInfo在API 28中已被弃用,因此在Android 9中无法使用。 - Werner Schäffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接