【问题标题】:Android bluetooth service with multiple activities具有多个活动的 Android 蓝牙服务
【发布时间】:2014-10-01 05:06:38
【问题描述】:

我有一个项目涉及使用 Android 设备通过蓝牙SPP 向远程嵌入式控制器(类似于 Arduino)发送命令和接收消息。

我已经成功创建了一个基于 YouTube 上一系列 tutorials 的单一活动应用程序。本教程中的大部分代码取自官方 BluetoothChat 示例,但它不是作为服务完成的。

现在我的问题...我需要设置一个“主页”活动,当点击相应的按钮时,它将启动其他活动。

从主页生成的每个活动都将具有按钮控件,以通过蓝牙向嵌入式控制器发送命令以执行不同的功能。

初始蓝牙连接在我的主页活动中启动。但是,当一个新的活动开始时,我的主页的onStop() 方法被调用并且蓝牙连接丢失。

在每个活动中都没有复制蓝牙代码,看起来服务是要走的路吗?我在 Stack Overflow link 上发现这篇文章非常好,但我对 Android 编程还很陌生,缺少的细节让我碰壁了。

此外,该示例未解决使用该服务的多个活动。对我来说,使用蓝牙连接进行多项活动的最佳方式是什么?

【问题讨论】:

    标签: android service bluetooth


    【解决方案1】:

    我看到您有两种选择来实现您的目标:

    • 在服务中管理您的蓝牙连接,并使用Android doc 编写工作服务。您可以使用 bindService() 将每个活动绑定到正在运行的服务。该服务在后台运行,并且在您从一项活动转到另一项活动时不会停止。但是为此,您需要将您拥有的大部分代码移动到服务中。再次,按照文档进行操作。

    • 使用片段:Android Doc。如果您对片段一无所知:Android doc。基本上,片段与活动非常相似,但 Android 建议使用片段。您将拥有一个 Activity 来管理您的蓝牙连接并托管您的 Fragments:您将用 Fragments 替换您希望在应用程序中拥有的所有 Activity。因此,当您从一个片段导航到另一个片段时,您的活动不会停止,因此您的蓝牙连接将是安全的。

    我不确切知道您想要做什么,但如果您的蓝牙连接必须运行,即使用户将手机放在口袋里,第一个选项也是唯一正确的选择。如果用户在离开应用时不需要保持蓝牙连接,则第二种选择会更好。

    希望清楚。

    【讨论】:

    • 片段的想法是我要走的路。我对 Fragments 知之甚少,但我花了大部分时间学习,我的应用程序现在可以按照我想要的方式运行。对于有类似情况的朋友,除了Android Docs,我强烈推荐Youtube上“Slidenerd”的片段系列教程。
    • 据我所知,当有界活动停止时,文档服务会停止。我对吗?因此,如果第二个活动在第一个活动(例如,单击按钮)之后启动,您如何将第二个活动绑定到服务? (这样在第一个活动中建立的连接就不会消失)
    • @Sndn 您应该创建一个 Activity,它就像所有其他人的主 Activity。您可以将其称为 AbstractActivity 或其他东西并用它扩展 Activity,然后所有其他活动都应该扩展该 AbstractActivity。这就是它不会停止工作的方式。 -edit- 我刚刚看到这个问题有多大了。但答案可能会对知道的人有所帮助。 :)
    【解决方案2】:

    您可能希望在 UI 线程之外运行它...独立于您的 Activity 在堆栈上的生命周期。还要调查提供者。如果您要处理应用程序的通信/访问或在应用程序之外进行通信(尤其是跨活动和其他 Android 应用程序),提供商将真正提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2013-02-08
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多