繁体   English   中英

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

[英]How to auto connect BLE device when in range?

我正在为IONIC 2开发应用程序。我要求在BLE设备处于有效范围内时自动与其连接。 这种情况是我的应用程序是在后台还是在前景中,我想自动连接我的BLE设备,并且如果断开连接,则继续搜索我的设备并在范围内重新连接它。 有没有办法做到这一点? 我已经提到了这个: https://github.com/don/cordova-plugin-ble-central : https://github.com/don/cordova-plugin-ble-central 我也提出了有关BLE连接检测的问题: 如何在IONIC 2中注册BLE状态通知 但是没有解决方案与此相关。 但是我什么也没找到。 请提出任何可行的方法。 我希望solutionw hich可以在ios和android上使用。

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

  1. 如果设备不在范围内,则它应在最终进入范围内时自动连接(无超时)。
  2. 当设备由于任何原因断开连接时,Android会在其进入范围之内自动重新连接。

是使用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插件似乎并不是为长期运行的后台连接而创建的,而该连接可能会花费一些时间。

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

我自己只知道android部分。 我认为这不是一件好事,因为要做到这一点,蓝牙必须始终处于打开状态,并且如果设备在有效范围之内,则设备应始终四处寻找。

有一些方法可以做到这一点,例如Alarm ManagerJob Scheduler (无论您的应用程序是前台还是后台,甚至是重新启动,它们都可以执行您想要的操作),但我不建议这样做,因为它可以使移动设备(屏幕和硬件)保持活动状态并消耗大量资源电池。

如果要执行此操作,请尽可能将搜索间隔设置为最小。 您可以使用下面的文章和页面等进行更多说明。

链接1

连结2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM