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.
* 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获取代码很简单,通过wifiManager 获取wifiinfo,从而获取bssid, public static String getWifiSSID(Context context) { String bssid = ""; ConnectivityManager manager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); if (
cordova . plugins . WiFiSSID . getSSID ( function ( info ) {
console . log ( info ) ;
BSSID: "b7:b2:6a:a0:21:17",
SSID: "crazy"
function checkWifiSignal() {
var info = {ssid:'',bssid:''};
var Context = plus.android.importClass("android.content.Context");
var WifiManager = plus.android.importClass("android.net.wifi.WifiManager");
var Ma
SSID (Service Set Identifier):服务集标识符
BSA (Basic Service Area):基本服务区域
BSS (Basic Service Set):基本服务集
ESS (Extended Service Set):扩展服务集
BSSID (Basic Service Set Identifier):基本服务集标.
launch with 'node server.js' command.
Express module which will provide a REST interface for retrieving
ssid and mac info for roaming devices:
1) First - populate the table
http://162.254.165.41:3000/usermac/22/bssid/288
http://162.254.165.41:3000/usermac/32/bssid/388
"mac": "22",
"bssid": "288",
"timestamp": 1420639677900
"mac": "32",
"bssid": "388",
"timest
SSID(Service Set Identifier)
SSID,AP唯一的ID码,许多人认为可以将SSID写成ESSID,其实不然,SSID是个笼统的概念,包含了ESSID和BSSID,用来区分不同的网络,最多可以有32个字符,无线网卡设置了不同的SSID就可以进入不同网络,无线终端和AP的SSID必须相同方可通信。无线网卡设置了不同的SSID就可以进入不同网络。
SSID通常由AP广播出来,通过终端自带的扫描功能可以相看当前区域内的SSID。出于安全考虑可以不广播SSID,此时用户就要.
一个AP和至少一个client构成的结构称为一个BSS(Basic Service Set),它需要有个标识(BSSID),用户扫描可用网络的时候,出现的是SSID,这是一个32 bytes的名字,比如’OPEN‘,比如’AIRPORT‘。
但是呢,这个基本是用户用的,其实在一个机场,一个用户从一个地方跑到另外一个地方,都在同一个SSID(’AIR PORT)下面,但是设备可能会连上了不同的一个AP(Access point),这也算是roaming了。但是会快很多,因为SSID是同一个,roaming之
BSSID (Basic Service Set Identifier) 是一种用于无线局域网 (WLAN) 的技术标准,它用于标识 WLAN 中的基本服务集。BSSID 是由基础设施网络(如无线路由器或无线接入点)生成的唯一的 48 位 MAC 地址,它用于在 WLAN 中标识基本服务集。
例如,当你在家连接到你的无线路由器时,你的设备会连接到该路由器的 BSSID 所代表的基本服务集。你也可以...