具有多项活动的Android蓝牙服务

时间:2014-10-01 05:06:38

标签: android service bluetooth

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

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

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

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

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

如果没有在每项活动中复制蓝牙代码,那么服务似乎是要走的路?我在Stack Overflow link上发现了这篇非常好的帖子,但我对Android编程已经足够新了,因为缺少的细节让我陷入了困境。

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

2 个答案:

答案 0 :(得分:2)

我认为有两种方法可以帮助您实现目标:

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

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

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

希望很清楚。

答案 1 :(得分:-1)

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