0

为了扫描 BTLE 设备,Android 应用程序需要ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION. 但是,该应用程序是否需要扫描BTLE 设备才能与之配对?

我在一个与睡眠监视器配对的应用程序中特别看到了这一点,并证明它是这样的:

从 Android 6.0 Marshmallow 开始,Android 要求执行低功耗蓝牙扫描的应用首先请求并获得访问设备定位服务的权限。

出于这个原因,Sense 将在设置过程中请求访问定位服务的权限。为了完成与 Sense 的配对,您需要授予对位置服务的访问权限。

这真的有必要吗?它们如何在不需要用户位置的情况下配对?我已经可以通过操作系统蓝牙对话框与独立于应用程序的设备配对。

为什么要感知蓝牙位置

4

1 回答 1

1

从技术上讲,如果 BLE 设备已经与移动设备配对,应用程序甚至不需要扫描。相反,它可以调用此函数来获取可由 BLE 过滤的设备列表:https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#getBondedDevices()

Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : devices) {
   if (device.getType() != BluetoothDevice.DEVICE_TYPE_LE) {
     continue;
   }
   //Do things to BLE device
}

但这不允许我按 UUID 进行过滤,这意味着我必须根据地址或名称来确定设备是什么,这两者都不可靠。

于 2016-12-10T13:57:36.957 回答