【问题标题】:What is the best way to maintain a Bluetooth connection after app is killed in Android?在Android中杀死应用程序后保持蓝牙连接的最佳方法是什么?
【发布时间】:2017-04-06 23:48:44
【问题描述】:

我正在 Android 中开发一个连接到蓝牙设备的应用程序。有时,警报管理器创建的警报会响起,并且应该将信息发送到连接的蓝牙设备。我的问题是,建立这种连接的最佳方式是什么,以便在活动停止(应用程序关闭)时我可以与设备通信。我已经阅读了有关意图服务、前台服务、远程信使服务的信息,但没有找到任何来源说明在关闭应用程序以托管蓝牙时提供不会结束的服务的最佳方式。

【问题讨论】:

    标签: android service bluetooth


    【解决方案1】:

    在 yourservice oncreate() 中创建您的服务类扩展服务和蓝牙适配器初始化

    【讨论】:

    • 当活动被销毁(应用程序关闭)时,服务也被销毁。如何保持服务不被破坏并保持与蓝牙设备的连接?
    【解决方案2】:

    前台服务

    首先我建议使用foreground service

    服务无限期运行,每次被杀死(由用户或系统杀死)时都会重新创建应用。
    此外,Oreos background execution limits 也排除了前台服务。

    查看this 帖子,了解 Android 服务生命周期的详细描述和测试。另请注意,测试服务的生命周期可能非常困难。一旦应用程序从最近使用的应用程序列表中滑出或以其他方式被终止,调试工具通常会断开与服务的连接。

    服务生命周期

    一旦您设置了前台服务,您应该使用Yongho 指出的服务生命周期挂钩来保持对外围设备的引用。

    例如,您可以创建 BluetoothScannerCallback 并将其分配给 OnCreate() 中的实例变量,如下所示:

    OnCreate() {
        _scannerCallback = CreateScannerCallback();
    }
    

    这样您就会收到有关连接中断的通知。还可以在服务中使用 Android 蓝牙默认适配器,以便在主机应用程序移至后台或终止(并重新创建)时保持与蓝牙设备的连接。

    您还应该取消初始化OnDestroy() 中的所有引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多