【问题标题】:Not able to reconnect using bluetoothgatt.connect() + android ble无法使用 bluetoothgatt.connect() + android ble 重新连接
【发布时间】:2014-12-03 06:49:30
【问题描述】:

我们正在编写一个 ble 应用程序,希望与我们要连接的外围设备建立持久连接。出于同样的目的,我们希望在失去现有连接时重新连接外围设备。因此,作为中心的 android 应用程序只是尝试使用 bluetoothgatt.connect() 方法重新连接。

但是每当我们尝试这样做时,我们的重新连接都会失败,

12-02 21:47:11.865: D/BluetoothGatt(31963): onClientConnectionState() - status=6 clientIf=6 device=******** 回调。

这里奇怪的是 status=6 是 request not supported。

最初,我们通过设置或不设置自动连接标志的 bluetoothdevice.connectGatt 方法连接到外围设备。

我们观察到的另一件事是,最初当我们失去连接时,我们会收到以下回调

onClientConnectionState() - status=8 clientIf=6 device=******** 回调。其中状态 8 是 GATT_INSUF_AUTHORIZATION。但是,如果您看到 btsnoop_hci.log 文件,断开连接的原因是连接超时,这是预期的,因为我们超出了范围。但 status=8 具有误导性。

我们发现不明显的另一件事是,如果我在断开连接后丢弃现有的 bluetoothgatt 对象并使用 bluetoothdevice.connectGatt 创建一个新对象,我们会连接到更奇怪的设备。

我们正在使用棒棒糖和其他一些设备在 nexus 5 上观察所有这些东西。

任何帮助将不胜感激。

【问题讨论】:

    标签: android bluetooth-lowenergy android-bluetooth


    【解决方案1】:

    首先你们都是状态 8,因为超时一点也不误导。因为这就是由于任何原因导致实际连接超时时所得到的结果,例如您的外围设备已关闭或超出范围。

    其次,您将收到状态 - 6(不支持的请求),主要是因为您的第一个请求是自动连接请求(即您在 connectGatt 方法中为自动标志传递了 true),其中 android ble 实现将负责让您连接每当你超时。这意味着您不必再次发出连接请求,因为只要外围设备回到范围内,您就会自动连接。

    【讨论】:

    • 当实际问题是连接超时时,我会说GATT_INSUF_AUTHORIZATION 是一个误导性错误代码。其实我不会说误导,我会说完全不正确。
    【解决方案2】:

    我想帮助您,只是我需要有关断开端设备的更多信息。 当您失去连接时,设备始终处于开启状态?

    我认为您需要再次扫描,无论设备是否再次打开,以使用特定设备初始化 Android。 当您运行扫描时,Android 会保存设备的一些信息,并与他一起使用它们的信息。

    您可以尝试使用 BluetoothAdapter.startLeScan() 重新扫描设备,获得设备后您可以使用 bluetoothdevice.connectGatt()。

    告诉我它是否有效。

    问候

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      相关资源
      最近更新 更多