如何在范围内自动连接BLE设备?

时间:2017-03-05 05:58:42

标签: android ios cordova angular ionic2

我开发了IONIC 2的应用程序。我要求当我的BLE设备在范围内自动连接到它。案例是我的应用程序是在后台还是在前台我想自动连接我的BLE设备,如果断开连接,则连续搜索到我的设备并在范围内重新连接。有没有办法做到这一点?我已经提到过:https://github.com/don/cordova-plugin-ble-central。我也提出了关于检测BLE连接的问题:How to register for BLE state notification in IONIC 2。但没有解决方案与此相关。但我没有找到任何东西。请建议任何方式来做到这一点。我想要解决方案,它应该适用于ios和android。

2 个答案:

答案 0 :(得分:1)

在Android中,使用以下属性设置长时间连接的正确方法:

  1. 如果设备不在范围内,它应该在最终进入范围时自动连接(无超时)。
  2. 当设备因任何原因断开连接时,Android应在范围内自动重新连接。
  3. 是使用https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback)

    其中autoConnect参数设置为true。如果设置为false,则超时为30秒,当设备断开连接时也不会自动重新连接。

    你提到的那个cordova插件不幸地将autoConnect硬编码为false。因此,您可以更改插件,以便将autoConnect设置为true,或者您可以设置扫描永久扫描并连接到您出现时感兴趣的设备。但该cordova插件使用最大扫描间隔(意味着它在100%的时间内扫描),其中通常设置为平均扫描5-10%的时间,以便不占用Wi-Fi带宽,但也节省电池。 ..我所说的是,似乎没有创建cordova插件用于长时间运行背景连接的目的,可能需要一些时间才能连接。

    为了确保您的应用程序不会在后台被杀,您需要在连接到BLE设备的同一进程中运行“Foreground Service”(https://developer.android.com/guide/components/services.html#Foreground)。

答案 1 :(得分:0)

我自己只知道android部分。 我认为这不是一个好的努力,因为要实现这一点,蓝牙必须始终打开,如果设备在范围内,设备应始终环顾四周。

有一些方法可以像Alarm ManagerJob Scheduler那样做(无论您的应用是在前台还是在后台,甚至重新启动,都可以按照您的要求进行操作)但是我不推荐它,因为它保留了移动存活(屏幕和硬件)和耗尽电池。

如果您想这样做,请尽可能将搜索间隔设置为最小值。 您可以使用以下文章和页面等进行更多说明。

Link 1

Link 2