android获取wifi别名,android-连接WIFI时获取SSID
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相关推荐
- java 获取wifi_获取wifi列表并连接wifi
一.获取wifi列表 获取wifi列表需要用wifiManager.startScan();进行扫描,扫描结果的列表使用List 保存 扫描步骤: wifiManager.startScan(); / ...
- ESP32入门基础之ESP32作为 WIFI Station去连接wifi热点
文章目录 1 工程简介 1.1 在menuconfig配置WiFi账号.密码 1.2 在程序中配置WiFi账号.密码 1 工程简介 参考工程为乐鑫官方例程: 实验目标: ESP32作为WiFi sta ...
- C#获取本机网络连接名,获取和设置IP地址
C#获取本机网络连接名,获取和设置IP地址,使用WMI接口 新建windowsForm应用程序GetAndSetIpAddressDemo,将默认的窗体Form1重命名为FormGetAndSetIP ...
- 【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位,原因如下: (1)卫星定位要求没有障碍物遮挡,它在户外比较精准,在 ...
- Android开机启动检测和连接wifi检测
Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 "android.intent.action.BOOT_COMPLETED&quo ...
- Android之Wifi学习(2)------连接Wifi
之前有一篇文章已经简单的讲过Wifi的基本知识,请见Android之Wifi学习(1).本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡.关闭无线网卡.检查网卡状态.扫描网络.扫描结果. ...
- Android 10 上使用WifiNetworkSpecifier 连接WiFi后http请求失败 Connection failed
问题描述:在连接设备热点的开发中,使用WifiNetworkSpecifier连上设备热点,再切换回原网络后,http请求一直报SocketException: Connection failed ( ...
- android 获得wifi列表并连接wifi
1.引包 implementation 'com.thanosfisherman.wifiutils:wifiutils:1.6.4' implementation 'com.thanosfisher ...
- Android7.0+ 获取WiFi列表以及连接WiFi
获取WiFi列表并连接 这段时间项目中涉及到需要获取WiFi列表以及连接,在这里记录下 其中就有一个坑,在Android7.0以上还需要打开定位(也就是手机中"位置信息") Wif ...
最新文章
- python自定义包或模块在Linux服务器导入错误的解决办法
- Apache Kafka - Schema Registry
- openresty + lua
- springmvc+mybatis+ajax 批量插入数据
- ES5-1 发展史、ECMA、编程语言、变量、JS值
- Sql数据库批量清理日志
- NYNU_省赛选拔题(10)
- mac m1 php,【php】Macbook m1 Big Sur 安装php7.1 mondodb 折腾记
- jdk优先级队列是如何实现的
- 音乐播放器 歌词同步滚动功能实现
- appium inspector连接appium service
- Win10系统重装教程(纯净版)
- CODEVS 2491 玉蟾宫
- mysql网络数据库操作模块_15.mysql数据库操作与Paramiko模块
- 很多人都想考一个RHCE吧,大家不妨看看我是怎么变成一个RHCE的。
- 应用程序无法正常启动 0xc000000d
- APAD 7'“谷歌Android操作系统1.5无线触摸屏
- 如何搭建一个盈利网站
- maven将lib打包进jar
- arcgis 属性表中起点终点创建线_连接起点与终点
热门文章
- sublime----------快捷键的记录
- I.MX6 MAC地址修改
- 为什么响应式编程并非一时之势?
- 生产环境mysql主主同步主键冲突处理
- 数据结构练手02 双向链表实现
- 哈工大-基于内核栈切换的进程切换
- 【论文写作】网上办公自动系统中功能需求如何写
- python 分布式锁_Python分布式锁 Sherlock
- 二叉树和等于某值路径_Go刷LeetCode系列:二叉树(3)二叉树路径和
- linux开机启动mysql脚本,ubuntu linux下mysql开机自启动 - 心之所向,无惧无悔! - 博客频道 - CSDN.NET...