Android BLE onCharacteristicChanged在重新启动应用后停止触发

时间:2015-07-17 08:56:49

标签: android bluetooth bluetooth-lowenergy

退出应用并重新启动后,我停止获取<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div class="SumoSelect" tabindex="0"> <select style="display: none;" class="popupShowOnAll" id="ddlFee" multiple="Multiple" name="ddlFee3923"></select> <p class="CaptionCont SlectBox"> <span>Lender Discount Fee</span> </p> </div>

以下是我与ble设备配对的步骤。

  1. 我有一个包含ble逻辑的服务并保留onCharacteristicChanged obj,我在应用启动时执行bluetoothGatth
  2. blueToothGatt.connect onConnectionStateChange后,我致电STATE_CONNECTED
  3. blueToothGatt.discover回调中,我将获取并保留我关心的服务和特征。然后我将调用onServicesDiscovered并写入描述符以启用通知。
  4. 现在我执行了一次写操作,然后我就可以回复blueToothGatt.setCharacteristicNotification了。
  5. 在此之后,说我退出应用程序(设备仍然配对)。最后一个活动的onCharacteristicChange,我的设备服务无法绑定...我将在onDestroy回调中执行关闭并致电unbind以停止服务。现在,如果我重新启动应用程序。我将执行相同的步骤1-4,但这次selfstop周围没有接到电话,我也尝试在关闭前断开连接......但这没有帮助
  6. (我注意到的一件事是,如果设备在重新启动时未配对/断开连接,则会出现问题,但是如果关闭BLE设备电源并在重新启动应用程序之前将其重新打开,那么我会得到回调onCharacteristicChange就好了。这似乎设备正在保留一些阻止onCharacteristicChanged来电的设置。)

    对此的任何见解将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。基本上bluettooth缓存最后一个句柄,因此发现服务永远不会被触发。连接后,您需要清除设备缓存。

How to programmatically force bluetooth low energy service discovery on Android without using cache