为什么我需要 Activity 才能使用 BluetoothAdapter?

Why do I need an Activity to use BluetoothAdapter?

当我开始使用 Android SDK 开发移动应用程序时,我想创建一个 BluetoothService class,它允许我连接到配对设备并通过注入在我需要的时候提供服务。

但是,当我尝试实现该服务时,我意识到 Android BluetoothAdapter 依赖于 Activity(又名活动视图)。所以我放弃了有Service的想法,直接在view中实现了Bluetooth。

虽然成功了,但我还是遇到了问题。

基本上,我的应用程序是一个遥控器,可用于一次控制关节臂的特定 joint/stepper 电机。

每当用户想要切换到另一个关节时,他们可以使用右上角的菜单,或者按顶部的图片(描绘手臂的图片)进入另一个视图,在那里他们可以按他们想要控制的部分(直接在图片上)。然后它将使用箭头按钮 return 它们到主 activity 。

然而,应用程序正在切换到另一个activity,这意味着之前的应用程序已被销毁。因此,应用程序会暂时失去与其他设备的蓝牙连接,而使用可注入的 BluetoothService 将允许我的应用程序在不同的活动中携带它。

为什么我需要 Activity 才能使用蓝牙适配器?

权限和发现需要 activity,因为它们需要用户输入。总的来说,其余的蓝牙 API 应该不需要 activity。特别是,一旦你得到 BluetoothDevice,真正的蓝牙 I/O 应该可以在没有 activity.

的情况下完成

在您的情况下,不清楚您是否真的需要在后台执行这项工作,因此可能不需要服务。或者:

  • 对所有这些工作使用单个 activity,使用片段或其他东西来处理由操作栏项目触发的工作;或

  • 让蓝牙通信由某个单例管理,也许使用存储库模式的变体,它位于 activity

  • 之外