当前位置: 首页 > 知识库问答 >
问题:

如何在每次打开时将应用程序重新连接到同一个蓝牙低能耗设备?

颜君浩
2023-03-14

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

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

目前,我通过以下方式实现了我的目标:

  • 我优先记忆所选设备的mac地址

有没有最好的方法来获得同样的东西?

主题外:函数onScanResult在ScanResult中返回给我空设备,是否正常?我已经使用了StartedScan(UUID[]serviceUuids,BluetoothAdapter.LeScanCallback回调),在Lollipop之后,我使用了带有Scanfilter的StartedScan的新版本。这可能是问题所在吗?

共有1个答案

莘睿
2023-03-14

出于隐私原因,mac地址不断变化-请参阅下面的ble规格片段:

5.4.5隐私功能

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

专用地址是使用绑定过程中交换的设备解析标识密钥(IRK)生成的。

所以理想的方法是使用IRK来生成设备的实际地址。但是我没有找到任何API来做到这一点。

目前,我在mny应用程序中使用的解决方法是重新连接到设备,

>

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

调用connectGatt(上下文上下文、布尔自动连接、BluetoothGattCallback回调)时,也可以尝试将自动连接标志设置为true

来自文档:

API级别18中添加了公共BluetoothGatt connectGatt(上下文上下文、布尔自动连接、BluetoothGattCallback回调)

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

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

将接收异步回调的回调GATT回调处理程序。如果回调为null,则引发IllegalArgumentException

 类似资料:
  • 你好,我希望有人能帮我解决这个问题,因为我起初认为这很容易!我是一个学习EE的学生,不太擅长代码,但很努力! 最后让我告诉你我的目标。。。。。 我希望能够在iPhone上打开一个应用程序,然后执行一些代码来发送消息,所有这些都是通过蓝牙实现的。 我希望能够将这个小型蓝牙设备与iPhone仅配对一次,并且能够使其处于睡眠模式(500毫安:D很棒),当我打开它时(通过一个小开关),它将打开一个应用程序

  • 我正在尝试制作一个应用程序,它使用Android的新蓝牙低能耗API。为此,我从API Level18附带的BLE示例开始。 当我读到Android不能充当外围设备时,我将Android手机置于中央模式,扫描周围的BLE设备。为此,我用一个模拟心脏传感器的北欧平台做了一些测试。一切都以完美的方式运作! 多谢了。 编辑:经过一些艰苦的测试,我在AOSP页面上提出了一个问题。这里可以查

  • ap.connectBLEDevice(OPTION | deviceId, CALLBACK) 连接低功耗蓝牙设备。可直接传入一个字符串作为 OPTION.deviceId。 OPTION 参数说明 名称 类型 必填 描述 deviceId String 是 蓝牙设备 id 错误码说明 error 描述 12 链接失败 代码示例 <script src="https://gw.alipayobj

  • 我知道你可以创建蓝牙经典设备,可以在操作系统级别与iPhone通信(即它们出现在设置选项卡中)。你能用蓝牙智能(低能耗)设备做到这一点吗?还是iOS需要一个应用程序来控制中央模式并连接到特定的设备?据我所知,iOS需要一个应用程序来启动和启动CBCentralManager,发现并连接到外围设备。好奇是否有一种方法可以在不使用英国电信经典的情况下解决这个问题。

  • ap.disconnectBLEDevice(OPTION | deviceId, CALLBACK) 断开与低功耗蓝牙设备的连接。可直接传入一个字符串作为 OPTION.deviceId。 OPTION 参数说明 名称 类型 必填 描述 deviceId String 是 蓝牙设备 id 错误码说明 error 描述 12 断开失败 代码示例 <script src="https://gw.al

  • 最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了: https://github.com/RadiusNetworks/android-ibeacon-serv