Android应用如何与BTLE设备配对而无需请求位置权限?

时间:2016-12-10 08:23:00

标签: android bluetooth android-permissions btle

scan for BTLE devices,Android应用需要 [HttpPost] [ValidateAntiForgeryToken] public ActionResult AddReservation([Bind(Include = "ID,carID,DateFrom,DateTo,UserID")] Reservation reservation, int? id) { Reservation finalReservation = new Reservation(id, reservation.DateFrom, reservation.DateTo, reservation.UserID); db.Reservations.Add(finalReservation); return View(); } ACCESS_COARSE_LOCATION。但是,对于scan,应用需要BTLE devices才能与其配对吗?

我特意看到这个应用程序与睡眠监视器配对并证明它like this

  

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

     

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

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

Sense Bluetooth location why

1 个答案:

答案 0 :(得分: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过滤,这意味着我必须根据地址或名称确定设备是什么,这两者都不可靠。