开发特定SSID连接App:从哪个Android版本起需激活GPS获取WiFi SSID?
关于Android读取WiFi SSID需激活GPS的版本确认
没错,你的判断完全正确——这个必须激活GPS(位置服务)才能读取WiFi SSID的限制,确实是从**Android 8.1 Oreo MR1(API 27)**开始引入的。
背后的原因
谷歌在API 27版本中强化了位置隐私保护机制:由于WiFi的SSID和BSSID可以被第三方用来精准定位用户的物理位置,所以官方将获取这类WiFi信息的操作,与设备的位置服务状态绑定了。在此之前(API 26及以下),只要你的App申请了ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限,即使位置服务关闭,也能正常读取SSID。
开发中的注意事项
- 首先必须确保App已申请并获得
ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限(这属于危险权限,需要动态申请) - 即使权限通过,若用户关闭了位置服务,调用
WifiInfo.getSSID()会返回<unknown ssid> - 你可以通过系统API检查位置服务状态,引导用户前往设置开启:
// Kotlin示例代码 val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager val isLocationEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) if (!isLocationEnabled) { // 跳转至位置服务设置页面 val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) startActivity(intent) }
内容的提问来源于stack exchange,提问作者E_Blue
相关产品推荐
相关产品推荐

