[英]how can I reconnect my application at every opening to the same bluetooth low energy device?
我正在开发一款Android应用。 在开始时,此应用程序向用户显示蓝牙设备列表,当他选择其中一个打开其他活动时。
我的目标是:在用户重新打开应用程序的某一天之后,应用程序必须记住ble设备,并且必须尝试重新连接到它。
现在我已经通过这种方式获得了目标:
有一种获得同样东西的最佳方法吗?
关闭主题:ScanResult中的函数onScanResult有时会返回给我null设备,这是正常的吗? 我使用了startLeScan(UUID [] serviceUuids,BluetoothAdapter.LeScanCallback回调),在棒棒糖之后我使用了新版本的startLeScan和Scanfilter。 这可能是问题吗?
为了保护隐私,mac地址不断变化 - 请参阅下面的片段报告:
5.4.5隐私功能
蓝牙LE支持通过频繁更改蓝牙设备地址来降低在一段时间内跟踪LE设备的功能。 隐私功能未在GAP发现模式和过程中使用,但在支持时,在连接模式和连接过程中使用它。 为了使用隐私功能的设备重新连接到已知设备,设备地址(称为专用地址)必须可由其他设备解析。
使用在绑定过程期间交换的设备的解析身份密钥(IRK)生成私有地址。
所以理想的方法是使用IRK来设置设备的实际地址。但是我没有找到任何API来执行它。
目前,我在mny app中使用的工作 - 重新连接到设备,
对所有设备重复步骤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.