我希望能够在Android的后台运行我的应用程序中的蓝牙。我已阅读各种指南,并了解创建意向服务的想法(类似于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特性更新。
那么如何在可以在后台运行的服务类型中创建此功能,如上所述?
答案 0 :(得分:2)
蓝牙LE Gatt API建立在Android的Binder机制之上,这意味着它只能在应用程序进程生效期间工作。您必须确保您的应用程序进程未被系统杀死。最简单的方法是运行前台服务(而不是意图服务)。唯一重要的是前台服务是活动的并且正在运行,您的服务类本身不需要做任何事情。但我想最简单的方法是将所有BLE代码放在该服务中。请参阅https://developer.android.com/guide/components/services.html#Foreground。