在开发IoT App往往需要WiFi配网功能,所以需要用到获取当前SSID的API接口,在Android9.0上获取的权限更加严格。
权限
ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION (需要动态申请)
ACCESS_WIFI_STATE 和 ACCESS_NETWORK_STATE
1 | <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
如果需要App进入后台时依然能获取到WiFi信息,需要增加一条动态权限
1 | android.permission.ACCESS_BACKGROUND_LOCATION |
没有这个权限,进入后台,WifiManager获取到的SSID值是 <unknown ssid>
,在后台时间长或者频繁获取WiFi信息,也会SSID值是 <unknown ssid>
。
接口
不要再从广播里面获取SSID,调用 WifiManager
的 getConnectionInfo()
函数,注意先请求申请权限。
1 | val mWifiManager = context?.getSystemService(WifiManager::class.java) |
另外,还需要在设备上启用位置服务(在 Settings > Location 下)。
监听网络
- 订阅系统广播(规范)
- 启动一个Timer检查(方便简单,但不可靠),时间长会获取不到SSID值。