需要在 Android 10.0 上为低功耗蓝牙扫描启用位置信息



将我的 Pixel XL 升级到 Android 版本 10.0 后,蓝牙低功耗 (BLE( 扫描仅在我打开位置信息的情况下才有效。

到目前为止,这还不是问题,它可以在运行Android 9.0,8.0和6.0.1的多个设备上运行。

我的应用仅使用BluetoothLeScannerstartScan(List<ScanFilter> filters, ScanSettings settings, ScanCallback callback)在前台扫描

我的应用程序具有FINE_LOCATION,COARSE_LOCATION和蓝牙权限,我尝试添加ACCESS_BACKGROUND_LOCATION权限但没有运气。

Android 10.0 中对应用扫描蓝牙设备是否有更严格的要求,我找不到任何相关信息,希望我不必要求用户打开位置才能让我的应用正常工作。

从Android 10开始,现在需要打开ACCESS_FINE_LOCATION才能执行蓝牙操作。这样做的原因是蓝牙可用于收集有关用户位置的信息 (例如, 使用 BLE 信标(, 为此应声明相关的应用程序权限.

对于Android 9及更低版本,ACCESS_COARSE_LOCATION就足够了,这可能就是您的应用程序正常运行的原因。

更多信息可以在这里找到:-

  • https://developer.android.com/guide/topics/connectivity/bluetooth#Permissions
  • 蓝牙LE扫描在后台的Android M上不起作用

我希望这有所帮助。

在 Android 10 上请求这三个权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

在清单中声明,并在运行时询问

最新更新