我正在Android中开发一个连接到蓝牙设备的应用程序。有时,警报管理器创建的警报会响起,并且应该向连接的蓝牙设备发送信息。我的问题是,建立此连接的最佳方式是什么,以便在活动停止时(app关闭)我可以与设备通信。我已经阅读了有关意图服务,前台服务,远程信使服务的信息,并且没有找到任何说明提供服务的最佳方式的来源,该服务在应用程序关闭以托管蓝牙时不会结束。
在yourservice oncreate()中创建服务类扩展服务和bluetoothadapter init
首先,我建议使用foreground service。
该服务无限期运行,应用程序将在每次被杀死时(由用户或系统)重新创建。 此外,前景服务也被排除在Oreos background execution limits之外。
查看this帖子,了解Android服务生命周期的详细说明和测试。还要注意,测试服务的生命周期可能非常困难。一旦应用程序从最近使用过的应用程序列表中删除或者被杀死,调试工具通常会松散与服务的连接。
设置前台服务后,您应该使用Yongho指出的服务生命周期钩子来保留对外围设备的引用。
例如,您可以创建并将BluetoothScannerCallback分配给OnCreate()
中的实例变量,如下所示:
OnCreate() {
_scannerCallback = CreateScannerCallback();
}
这样,您将收到有关连接丢失的通知。还可以在服务中使用Androids蓝牙默认适配器,以便在将主机应用程序移至后台或终止(并重新创建)时保持与蓝牙设备的连接。
您还应该对OnDestroy()
中的所有引用进行取消初始化。