由于位置许可,BLE 蓝牙扫描无法在 Android 10 和 11 上运行
Posted
技术标签:
【中文标题】由于位置许可,BLE 蓝牙扫描无法在 Android 10 和 11 上运行【英文标题】:BLE Bluetooth scanning is not working on Android 10 & 11 due to location permission 【发布时间】:2021-07-21 11:28:03 【问题描述】:我正在研究 BLE 蓝牙扫描正在除 android 10 和 11 之外的所有设备上工作。更新应用程序后,Android 10 和 11 中的蓝牙扫描无法正常工作。 有时即使在允许位置权限之后,应用程序也必须从应用程序设置中重新授予权限。 为什么这不为人所知,而在现实中总是如此
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) //代码在这里..
【问题讨论】:
除了授予权限外,您还必须启用位置扫描 在较新的Android版本中,粗略的位置权限是不够的;你需要好的位置。 【参考方案1】:请根据操作系统版本验证是否实现了定位权限检查
Android 8 (≥8):后台应用每小时只能检索几次用户的位置。
在 Android 10(
Android 10(≥10),后台位置作为独立资源而来。除了前台权限之外,应用程序还必须明确请求此权限。
Android 11(≥11),后台位置权限不能和其他人同时申请。应用程序必须单独请求。此外,请求此权限不会立即提示用户其他权限,而是将用户带到/设置页面/位置权限会话,以便用户可以更新权限级别。
注意:有时当应用程序安装在工作模式配置文件中时,即使我们允许从应用程序设置权限,我们也必须手动启用权限设置
【讨论】:
【参考方案2】:尝试在您的应用启动时使用requestPermissions 实际向用户请求权限:
// Request location permission, needed for BLE Scan
ActivityCompat.requestPermissions(this,
new String[]
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
2);
您可以在文档的this 页面上找到有关如何更好地处理此事件的更多信息。
【讨论】:
以上是关于由于位置许可,BLE 蓝牙扫描无法在 Android 10 和 11 上运行的主要内容,如果未能解决你的问题,请参考以下文章