发布
社区首页 >问答首页 >连接WIFI时获取SSID

连接WIFI时获取SSID
EN

Stack Overflow用户
提问于 2014-01-27 20:51:15
回答 10查看 139.5K关注 0票数 81

当我的android设备连接到WIFI时,我正在尝试获取WIFI网络的SSID。

我注册了一个BroadcastReceiver收听android.net.wifi.supplicant.CONNECTION_CHANGE。当WIFI断开或重新连接时,我会收到通知。不幸的是,我无法获得网络的SSID。

我使用以下代码查找SSID:

代码语言:javascript
代码运行次数:0
复制
WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();

我将返回字符串,而不是SSID。

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

代码语言:javascript
代码运行次数:0
复制
<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。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2014-01-27 21:15:44

我在广播接收器中收听WifiManager.NETWORK_STATE_CHANGED_ACTION

代码语言:javascript
代码运行次数:0
复制
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
    NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);
    if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {
        ...
    }
}

我查过netInfo.isConnected()了。那我就可以用

代码语言:javascript
代码运行次数:0
复制
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
String ssid  = info.getSSID();

更新

从Android8.0开始,我们将不会获得连接网络的SSID,除非启用了位置服务,并且您的应用程序拥有访问它的权限。

票数 113
EN

Stack Overflow用户

发布于 2017-12-16 16:52:25

从Android8.1 (API 27)开始,应用程序必须获得ACCESS_COARSE_LOCATION (或ACCESS_FINE_LOCATION)许可才能从WifiInfo.getSSID()WifiInfo.getBSSID()获得结果。针对API 29或更高版本(Android10)的应用程序必须被授予ACCESS_FINE_LOCATION

WifiManager.getConnectionInfo()WifiManager.getScanResults()获得结果也需要此权限,但尚不清楚这是8.1中的新特性还是以前需要的。

来源:"BSSID/SSID可用于推断位置,因此对使用WifiManager.getConnectionInfo()请求的这些WifiInfo字段的访问要求具有与WifiManager.getScanResults()相同的位置权限。“

票数 59
EN

Stack Overflow用户

发布于 2016-01-18 07:02:37

如果您不想制作广播接收器,那么就简单地尝试

代码语言:javascript
代码运行次数:0
复制
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo;

wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
    ssid = wifiInfo.getSSID();
}

请记住,每次用户断开或连接到新的SSID或任何wifi状态更改时,都需要初始化WifiInfo,即wifiInfo = wifiManager.getConnectionInfo();

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21391395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档