由于位置许可,BLE 蓝牙扫描不适用于 Android 10 和 11

问题描述

我正在研究 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){ //代码在这里.. }

解决方法

尝试使用 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 页上找到有关如何更好地处理此事件的更多信息。

,

请确认您是否根据os版本实现了位置权限检查

  1. Android 8 (≥8):后台应用每小时只能检索几次用户的位置。

  2. 在 Android 10(

  3. Android 10(≥10),后台位置作为独立资源出现。除了前台权限外,应用程序还必须明确请求此权限。

  4. Android 11(≥11),不能与其他人同时请求后台位置权限。应用程序必须单独请求。此外,请求此权限不会像其他权限一样立即提示用户,而是会将用户带到 /Settings 页面/Location 权限会话,以便用户可以更新权限级别。

注意:有时当应用程序安装在工作模式配置文件中时,即使我们从应用程序允许它,我们也必须手动启用设置权限