在安卓后台运行 BLE



我目前所在的位置:

我希望能够在安卓的后台运行我的应用程序中的蓝牙。我已经阅读了各种指南并理解创建意图服务的想法(例如android.app.IntentService并扩展它,用您想要的行为覆盖onHandleIntent),但是,我不明白这将如何与我现有的行为相互作用?例如,我目前调用:

...
var bluetoothManager = utils.ad.getApplicationContext().getSystemService(android.content.Context.BLUETOOTH_SERVICE);
adapter = bluetoothManager.getAdapter();
adapter.startLeScan(Bluetooth._scanCallback)
...

(这是在JavaScript中,使用nativescript运行时,所以不要担心它看起来有点奇怪。

我想去的地方:

我希望能够在后台扫描并重新连接到配对的设备,并接收(存储在SQLite中)GATT特征更新。

问题:

那么,如何在可以在后台运行的服务类型中创建此功能,如上所述?

蓝牙 LE Gatt API 基于 Android 的 Binder 机制构建,这意味着它只能在应用程序进程处于活动状态期间工作。必须确保应用进程未被系统终止。最简单的方法是运行前台服务(而不是意向服务)。唯一重要的是前台服务处于活动状态并正在运行,您的服务类本身不必执行任何操作。但我想最简单的方法是将所有BLE代码放在该服务中。请参阅 https://developer.android.com/guide/components/services.html#Foreground。

最新更新