代码很简单,通过wifiManager 获取wifiinfo,从而获取bssid,

  public static String getWifiSSID(Context context) {
String bssid = "";
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
if (manager == null) {
return bssid;
} NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
if (activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting() && activeNetworkInfo.getType() == TYPE_WIFI) {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
if (wifiManager == null) {
return bssid;
}
WifiInfo connectionInfo = wifiManager.getConnectionInfo();
bssid = connectionInfo.getBSSID();
}
return bssid;
}

几个注意的地方吧:

1:getActiveNetworkInfo方法时需要添加权限

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

2:直接通过上述方法执行时,会抛出RuntimeException:

  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zh.wifiinfotest/com.zh.wifiinfotest.MainActivity}: java.lang.SecurityException: WifiService: Neither user 10138 nor current process has android.permission.ACCESS_WIFI_STATE.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3915)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4098)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2475)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8401)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1087)
Caused by: java.lang.SecurityException: WifiService: Neither user 10138 nor current process has android.permission.ACCESS_WIFI_STATE.
at android.os.Parcel.createException(Parcel.java:2082)
at android.os.Parcel.readException(Parcel.java:2050)
at android.os.Parcel.readException(Parcel.java:1998)
at android.net.wifi.IWifiManager$Stub$Proxy.getConnectionInfo(IWifiManager.java:2374)
at android.net.wifi.WifiManager.getConnectionInfo(WifiManager.java:2338)
at com.zh.wifiinfotest.MainActivity.getWifiSSID(MainActivity.java:39)
at com.zh.wifiinfotest.MainActivity.onCreate(MainActivity.java:23)
at android.app.Activity.performCreate(Activity.java:8121)
at android.app.Activity.performCreate(Activity.java:8109)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3888)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4098) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2475) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:219) 
at android.app.ActivityThread.main(ActivityThread.java:8401) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1087) 
Caused by: android.os.RemoteException: Remote stack trace:
at android.app.ContextImpl.enforce(ContextImpl.java:2025)
at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:2053)
at com.android.server.wifi.WifiServiceImpl.enforceAccessPermission(WifiServiceImpl.java:1130)
at com.android.server.wifi.WifiServiceImpl.getConnectionInfo(WifiServiceImpl.java:2740)
at android.net.wifi.IWifiManager$Stub.onTransact(IWifiManager.java:1047)
callee: null 4649/12306

添加权限android.permission.ACCESS_WIFI_STATE。

3:继续执行。这次获取到了bssid,但是取得的值却是默认值:02:00:00:00:00:00。

这是什么问题?

我们看下获取wifiInfo的方法:

    /**
* Return dynamic information about the current Wi-Fi connection, if any is active.
* <p>
* In the connected state, access to the SSID and BSSID requires
* the same permissions as {@link #getScanResults}. If such access is not allowed,
* {@link WifiInfo#getSSID} will return {@link #UNKNOWN_SSID} and
* {@link WifiInfo#getBSSID} will return {@code "02:00:00:00:00:00"}.
* {@link WifiInfo#getPasspointFqdn()} will return null.
* {@link WifiInfo#getPasspointProviderFriendlyName()} will return null.
*
* @return the Wi-Fi information, contained in {@link WifiInfo}.
*/
public WifiInfo getConnectionInfo() {
try {
return mService.getConnectionInfo(mContext.getOpPackageName(),
mContext.getAttributionTag());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}

可以看到注释中有这么一句话,获取bssid和ssid需要getScanResults相同的权限。

   /**
* Return the results of the latest access point scan.
* @return the list of access points found in the most recent scan. An app must hold
* {@link android.Manifest.permission#ACCESS_FINE_LOCATION ACCESS_FINE_LOCATION} permission
* in order to get valid results.
*/
public List<ScanResult> getScanResults() {
try {
return mService.getScanResults(mContext.getOpPackageName(),
mContext.getAttributionTag());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}

好吧,需要ACCESS_FINE_LOCATION权限。

添加权限后,获得bssid.

Wifi BSSID获取的更多相关文章

  1. Windows Phone获取WiFi BSSID

    原文:Windows Phone获取WiFi BSSID BSSID,一种特殊的Ad-hoc LAN的应用,也称为Basic Service Set (BSS),一群计算机设定相同的BSS名称,即可自 ...

  2. android WIFI信息获取

    在androi中WIFI信息的获取能够通过系统提供的WIFI Service获取 [java]  WifiManager wifi_service = (WifiManager)getSystemSe ...

  3. 解决公司的垃圾wifi dhcp获取不到ip 以及配上ip也不能联网的原因

    用手机连公司的wifi时,发现dhcp自动获取不到ip,然后配置了静态ip,但是还是无法联网, 然后发现鸡巴垃圾公司傻逼操她妈的逼原来是google的dns导致不能用???  换成114.114.11 ...

  4. Android获取wifi MAC,关闭的wifi不能获取

    最近一直在尝试着在Android上通过ndk用C++获取本机MAC地址,但是用ioctl(SIOCGIFHWADDR)时,一直返回值小于0,即获取不到接口信息.刚开始我以为是自己漏掉了哪些访问权限,所 ...

  5. 【wifi移植 3】开发板wifi自动获取IP

    内核版本:3.4.61 1. 配置内核,支持DHCP ~/kernel$ make menuconfig [*] Networking support  ---> Networking opti ...

  6. 无线渗透--wifiphisher之wifi钓鱼获取wifi密码

    本来是想试验一下暴力破解的,但是由于字典太大,跑的时间也比较长,于是使用了钓鱼的方法. 先说一下wifiphisher钓鱼获取wifi密码的原理: wifiphisher对于你在攻击中选定的wifi会 ...

  7. wifi,网关相关标识的获取

    获取WIFI的相关信息 - (void)getWifiInfo { NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfa ...

  8. 获取wifi信息

    最近有个项目需要获取手机附近wifi列表,查了许多资料发现,现在只能查到wifi的SSID,并且用到的是私有api,无法通过app store审核,这里记录一下,方便学习,新手勿喷,欢迎大神指教(wi ...

  9. 微信小程序开发(九)获取手机连接的wifi信息

    // succ.wxml <view>WIFI ssid:{{wifissid}}</view> <view>WIFI bssid:{{wifiBssid}}< ...

  10. Android 获取WIFI MAC地址的方法

    1. 经常用法,调用Android的API:WifiManager <uses-permission android:name="android.permission.ACCESS_W ...

随机推荐

  1. KMP字符串对比算法及next数组计算

    (注:该贴主要运用python实现该算法) 先谈谈KMP算法吧.KMP算法的全称是Knuth-Morris-Pratt 算法,它是用来进行字符串查找,即在某个主字符串里面找到某个特定子字符串.但是好像 ...

  2. SQL Server关于AlwaysOn的理解-读写分离的误区(一)

    前言 很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到.因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到 ...

  3. 搭建eureka服务注册中心,单机版

    单独搭建的 搭建springboot项目 (1)pom文件 <?xml version="1.0" encoding="UTF-8"?> <p ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题

    三.用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本. 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示.这个版本使用 Go 语言编写,利用 ...

  5. Gson替换掉多漏洞的FastJson

    添加依赖: <!-- gson --> <dependency> <groupId>com.google.code.gson</groupId> < ...

  6. 🔥🔥你真的知道TCP协议中的序列号确认、上层协议及记录标识问题吗?

    引言 在前面的内容中,我们已经详细讲解了一系列与TCP相关的面试问题.然而,这些问题都是基于个别知识点进行扩展的.今天,我们将重点讨论一些场景问题,并探讨如何解决这些问题. 序列号确认问题 当A主机与 ...

  7. vue element ui 组件使用 -form 表单

    表单验证rules 绑定是规则 也可以自定义规则,:model是表单的数据源 el-form-item 标签里面prop的名字要和数据源的名字一致,才能验证生效 ;提交时调用this.$refs[fo ...

  8. 三维形体的表面积(3.25leetcode每日打卡)

    在 N * N 的网格上,我们放置一些 1 * 1 * 1  的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上. 请你返回最终形体的表面积.   ...

  9. 决策树C4.5算法的技术深度剖析、实战解读

    在本篇深入探讨的文章中,我们全面分析了C4.5决策树算法,包括其核心原理.实现流程.实战案例,以及与其他流行决策树算法(如ID3.CART和Random Forests)的比较.文章不仅涵盖了丰富的理 ...

  10. [PostgreSQL]在group by查询下拼接列字符串

    首先创建group_concat聚集函数: CREATE AGGREGATE group_concat(anyelement) ( sfunc = array_append, -- 每行的操作函数,将 ...