android-连接WIFI时获取SSID

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

我已经注册了一个BroadcastReceiver,用于监听wifiInfo.getBSSID()。 WIFI断开或重新连接时,我会收到通知。 不幸的是,我无法获得网络的SSID。

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

WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

String ssid = wifiInfo.getSSID();

取回字符串2673771322295190190528,而不是SSID。

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

为什么会这样? 如何获得实际的SSID? 建立连接之前,广播是否会提前播放? 还有我应该听的广播吗? 我只对WIFI连接感兴趣,对3G连接不感兴趣。

更新:我刚刚检查过,wifiInfo.getBSSID()返回null。

zmbq asked 2019-12-25T20:48:42Z

7个解决方案

89 votes

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

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {

NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);

if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {

我检查了netInfo.isConnected()。 然后我就可以使用

WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);

WifiInfo info = wifiManager.getConnectionInfo ();

String ssid = info.getSSID();

更新

从android 8.0开始,除非打开GPS,否则我们将不会获得所连接网络的SSID。

Eric Woodruff answered 2019-12-25T20:49:13Z

46 votes

从Android 8.1(API 27)开始,必须为应用授予WifiManager.getConnectionInfo()(或WifiManager.getScanResults())权限,以便从WifiInfo.getSSID()或WifiInfo.getBSSID()获得结果。

要获得WifiManager.getConnectionInfo()和WifiManager.getScanResults()和WifiManager.getScanResults()的结果,还需要获得此许可,尽管尚不清楚这是8.1中的新增功能还是以前的要求。

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

mike47 answered 2019-12-25T20:49:43Z

30 votes

如果您不想制作广播接收器,请简单尝试

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();

Pranav answered 2019-12-25T20:50:07Z

13 votes

我找到了一个有趣的解决方案来获取当前连接的Wifi AP的SSID。您只需要使用迭代NetworkInfo.getState并找到具有特定NetworkInfo.State.CONNECTED的配置

我的例子

在广播接收器中,动作为NetworkInfo.getState我正在从意图中获取当前的连接状态

NetworkInfo nwInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

nwInfo.getState()

如果NetworkInfo.getState等于NetworkInfo.State.CONNECTED,那么我可以获得当前的WifiInfo对象

WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);

WifiInfo info = wifiManager.getConnectionInfo ();

在那之后

public String findSSIDForWifiInfo(WifiManager manager, WifiInfo wifiInfo) {

List listOfConfigurations = manager.getConfiguredNetworks();

for (int index = 0; index < listOfConfigurations.size(); index++) {

WifiConfiguration configuration = listOfConfigurations.get(index);

if (configuration.networkId == wifiInfo.getNetworkId()) {

return configuration.SSID;

}

}

return null;

}

而且非常重要的一点是,此方法不需要“位置”即可权限

TomMannson answered 2019-12-25T20:50:50Z

5 votes

在Android 8.1中,必须打开“位置”以获取SSID,否则无法获取连接状态,但无法获取SSID

WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = null;

if (wifiManager != null)

wifiInfo = wifiManager.getConnectionInfo();

String ssid = null;

if (wifiInfo != null)

ssid = wifiInfo.getSSID(); /*you will get SSID if location turned off*/

user3143487 answered 2019-12-25T20:51:10Z

3 votes

这是@EricWoodruff给出的答案的后续措施。

您可以使用Context的getExtraInfo()来获取WiFi SSID。

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {

NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);

if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {

String ssid = info.getExtraInfo()

Log.d(TAG, "WiFi SSID: " + ssid)

}

}

如果您未使用BroadcastReceiver,请检查此答案以使用Context获得SSID

这已在Android Oreo 8.1.0上进行了测试

Yaswant Narayan answered 2019-12-25T20:51:43Z

-2 votes

显示空值的Android 9 SSID使用此代码。

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("^\"|\"$", "");

}

Udhaya Sweetidiot answered 2019-12-25T20:52:03Z

android获取wifi别名,android-连接WIFI时获取SSID相关推荐

  1. java 获取wifi_获取wifi列表并连接wifi

    一.获取wifi列表 获取wifi列表需要用wifiManager.startScan();进行扫描,扫描结果的列表使用List 保存 扫描步骤: wifiManager.startScan(); / ...

  2. ESP32入门基础之ESP32作为 WIFI Station去连接wifi热点

    文章目录 1 工程简介 1.1 在menuconfig配置WiFi账号.密码 1.2 在程序中配置WiFi账号.密码 1 工程简介 参考工程为乐鑫官方例程: 实验目标: ESP32作为WiFi sta ...

  3. C#获取本机网络连接名,获取和设置IP地址

    C#获取本机网络连接名,获取和设置IP地址,使用WMI接口 新建windowsForm应用程序GetAndSetIpAddressDemo,将默认的窗体Form1重命名为FormGetAndSetIP ...

  4. 【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位,原因如下: (1)卫星定位要求没有障碍物遮挡,它在户外比较精准,在 ...

  5. Android开机启动检测和连接wifi检测

    Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 "android.intent.action.BOOT_COMPLETED&quo ...

  6. Android之Wifi学习(2)------连接Wifi

    之前有一篇文章已经简单的讲过Wifi的基本知识,请见Android之Wifi学习(1).本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡.关闭无线网卡.检查网卡状态.扫描网络.扫描结果. ...

  7. Android 10 上使用WifiNetworkSpecifier 连接WiFi后http请求失败 Connection failed

    问题描述:在连接设备热点的开发中,使用WifiNetworkSpecifier连上设备热点,再切换回原网络后,http请求一直报SocketException: Connection failed ( ...

  8. android 获得wifi列表并连接wifi

    1.引包 implementation 'com.thanosfisherman.wifiutils:wifiutils:1.6.4' implementation 'com.thanosfisher ...

  9. Android7.0+ 获取WiFi列表以及连接WiFi

    获取WiFi列表并连接 这段时间项目中涉及到需要获取WiFi列表以及连接,在这里记录下 其中就有一个坑,在Android7.0以上还需要打开定位(也就是手机中"位置信息") Wif ...

最新文章

  1. python自定义包或模块在Linux服务器导入错误的解决办法
  2. Apache Kafka - Schema Registry
  3. openresty + lua
  4. springmvc+mybatis+ajax 批量插入数据
  5. ES5-1 发展史、ECMA、编程语言、变量、JS值
  6. Sql数据库批量清理日志
  7. NYNU_省赛选拔题(10)
  8. mac m1 php,【php】Macbook m1 Big Sur 安装php7.1 mondodb 折腾记
  9. jdk优先级队列是如何实现的
  10. 音乐播放器 歌词同步滚动功能实现
  11. appium inspector连接appium service
  12. Win10系统重装教程(纯净版)
  13. CODEVS 2491 玉蟾宫
  14. mysql网络数据库操作模块_15.mysql数据库操作与Paramiko模块
  15. 很多人都想考一个RHCE吧,大家不妨看看我是怎么变成一个RHCE的。
  16. 应用程序无法正常启动 0xc000000d
  17. APAD 7'“谷歌Android操作系统1.5无线触摸屏
  18. 如何搭建一个盈利网站
  19. maven将lib打包进jar
  20. arcgis 属性表中起点终点创建线_连接起点与终点

热门文章

  1. sublime----------快捷键的记录
  2. I.MX6 MAC地址修改
  3. 为什么响应式编程并非一时之势?
  4. 生产环境mysql主主同步主键冲突处理
  5. 数据结构练手02 双向链表实现
  6. 哈工大-基于内核栈切换的进程切换
  7. 【论文写作】网上办公自动系统中功能需求如何写
  8. python 分布式锁_Python分布式锁 Sherlock
  9. 二叉树和等于某值路径_Go刷LeetCode系列:二叉树(3)二叉树路径和
  10. linux开机启动mysql脚本,ubuntu linux下mysql开机自启动 - 心之所向,无惧无悔! - 博客频道 - CSDN.NET...