同伴设备配对:是否需要启用定位服务?



我已经实现了伴侣设备配对,它适用于大多数设备,无需任何位置许可或启用位置服务。然而,我们发现,例如小米红米Note 10 Pro (Android 11),当定位服务被禁用时,BLE扫描超时。

  1. 我还需要实现要求的位置服务在扫描之前启用或这是不希望的行为?我希望这次系统级BLE扫描不再需要它了。
  2. 如果是,有没有办法区分哪个设备需要它?我不想在不需要的时候强迫所有人(例如我的Pixel 5)

在我看来,伴侣设备功能的实现和设计都很匆忙。你可能会遇到诸如"定位服务"之类的bug。必须开启,并且"伴侣设备"配对对话框在未启用时不会发出警告。在小米或谷歌修复这个错误之前,你需要在你的应用程序中找到变通办法,例如告诉用户如果你认为需要的话,首先启用位置服务。

我还面临应用扫描过滤器的问题。这完全是一场噩梦。

我从这个开始:

val filter = ScanFilter.Builder().apply {
setManufacturerData(SOME_INDEX, byteArrayOf(1))
setDeviceName(SOME_NAME)
setServiceUuid(ParcelUuid.fromString(SOME_UUID))
}.build()

最后,我只有这个:

ScanFilter.Builder().apply {
setManufacturerData(SOME_INDEX, byteArrayOf(1))
}.build()

因为setServiceUuid()不能在所有被测试的华为手机和索尼Xperia x上工作。

setDeviceName()不工作,例如在三星S10e。最后,我找到了解决方案的名称过滤直接应用:

BluetoothLeDeviceFilter.Builder()
.setNamePattern(Pattern.compile(SOME_NAME))
.setScanFilter(filter)

相关内容

  • 没有找到相关文章

最新更新