配套设备配对:是否需要启用位置服务?
Companion device pairing: Is location services needed to be enabled?
我已经实现了 Companion device pairing,它适用于大多数设备,无需任何位置许可或启用位置服务。但是,我们发现例如小米 Redmi Note 10 Pro (Android 11) 在禁用位置服务时 BLE 扫描超时。
- 我是否仍需要实施要求在扫描前启用位置服务,或者这是不受欢迎的行为?我希望这个系统级 BLE 扫描不再需要它。
- 如果是这样,有没有办法区分哪个设备需要它?我不想在不需要时强迫所有人(例如我的 Pixel 5)
在我看来,Companion Device 功能是仓促实施和设计的。您可能会遇到必须打开“位置服务”之类的错误,并且配套设备配对对话框在未启用时不会发出警告。在小米或 Google 修复此错误之前,您将需要在您的应用程序中有变通办法,例如,如果您认为需要,请告诉用户首先启用位置服务。
我在应用扫描过滤器时也遇到了问题。这完全是一场噩梦。
我是从这个开始的:
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)
我已经实现了 Companion device pairing,它适用于大多数设备,无需任何位置许可或启用位置服务。但是,我们发现例如小米 Redmi Note 10 Pro (Android 11) 在禁用位置服务时 BLE 扫描超时。
- 我是否仍需要实施要求在扫描前启用位置服务,或者这是不受欢迎的行为?我希望这个系统级 BLE 扫描不再需要它。
- 如果是这样,有没有办法区分哪个设备需要它?我不想在不需要时强迫所有人(例如我的 Pixel 5)
在我看来,Companion Device 功能是仓促实施和设计的。您可能会遇到必须打开“位置服务”之类的错误,并且配套设备配对对话框在未启用时不会发出警告。在小米或 Google 修复此错误之前,您将需要在您的应用程序中有变通办法,例如,如果您认为需要,请告诉用户首先启用位置服务。
我在应用扫描过滤器时也遇到了问题。这完全是一场噩梦。
我是从这个开始的:
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)