繁体   English   中英

如何在每个开放时将我的应用程序重新连接到同一个蓝牙低功耗设备?

[英]how can I reconnect my application at every opening to the same bluetooth low energy device?

我正在开发一款Android应用。 在开始时,此应用程序向用户显示蓝牙设备列表,当他选择其中一个打开其他活动时。

我的目标是:在用户重新打开应用程序的某一天之后,应用程序必须记住ble设备,并且必须尝试重新连接到它。

现在我已经通过这种方式获得了目标:

  • 我优先记住所选设备的mac地址
  • 当用户重新打开应用程序时,应用程序会执行隐藏扫描并尝试重新连接到具有相同MAC地址的设备。
  • 为了检索mac地址,我使用函数getAddress()(当我尝试连接到android外设时,这个函数给我一些问题,因为设备在每次启动时更改了他的MAC地址:/)

有一种获得同样东西的最佳方法吗?

关闭主题:ScanResult中的函数onScanResult有时会返回给我null设备,这是正常的吗? 我使用了startLeScan(UUID [] serviceUuids,BluetoothAdapter.LeScanCallback回调),在棒棒糖之后我使用了新版本的startLeScan和Scanfilter。 这可能是问题吗?

为了保护隐私,mac地址不断变化 - 请参阅下面的片段报告:

5.4.5隐私功能

蓝牙LE支持通过频繁更改蓝牙设备地址来降低在一段时间内跟踪LE设备的功能。 隐私功能未在GAP发现模式和过程中使用,但在支持时,在连接模式和连接过程中使用它。 为了使用隐私功能的设备重新连接到已知设备,设备地址(称为专用地址)必须可由其他设备解析。

使用在绑定过程期间交换的设备的解析身份密钥(IRK)生成私有地址。

所以理想的方法是使用IRK来设置设备的实际地址。但是我没有找到任何API来执行它。

目前,我在mny app中使用的工作 - 重新连接到设备,

  1. 循环遍历所有可用的设备。
  2. 获取序列号 - 如果序列号与已存储的号码匹配,则保持连接断开连接。
  3. 对所有设备重复步骤2。

    只有当设备通过某些服务公开序列号时,此解决方法才有效。

当您调用connectGatt(Context context,boolean autoConnect,BluetoothGattCallback callback)时,您也可以尝试将autoconnect标志设置为true。

来自文档:

公共BluetoothGatt connectGatt(上下文上下文,布尔autoConnect,BluetoothGattCallback回调)在API级别18中添加

连接到此设备托管的GATT服务器。 呼叫者充当GATT客户端。 回调用于将结果传递给调用者,例如连接状态以及任何进一步的GATT客户端操作。 该方法返回一个BluetoothGatt实例。 您可以使用BluetoothGatt进行GATT客户端操作。 参数

autoConnect是否直接连接到远程设备(false)或在远程设备可用时立即自动连接(true)。

回调GATT回调处理程序,它将接收异步回调。 如果回调为null,则抛出IllegalArgumentException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM