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