android - 为什么我需要一个 Activity 才能使用 BluetoothAdapter?
问题描述
当我开始使用 Android SDK 开发移动应用程序时,我想创建一个 BluetoothService 类,它允许我连接到配对设备并通过在需要时注入服务来与它通信。
但是,当我尝试实现该服务时,我意识到 Android BluetoothAdapter 依赖于一个 Activity(也就是一个活动视图)。所以我放弃了拥有Service的想法,直接在视图中实现了蓝牙。
尽管它有效,但我仍然遇到了问题。
基本上,我的应用程序是一个遥控器,可用于一次控制关节臂的特定关节/步进电机。
每当用户想要切换到另一个关节时,他们可以使用右上角的菜单,或者按顶部的图片(描绘手臂的图片)进入另一个视图,在那里他们可以按下他们想要的部分控制(直接在图片上)。然后它将使用箭头按钮将它们返回到主要活动。
但是,应用程序正在切换到另一个活动这一事实意味着前一个活动已被破坏。因此,应用程序会暂时失去与其他设备的蓝牙连接,而使用可注入的 BluetoothService 将允许我的应用程序在不同的活动中携带它。
为什么我需要一个 Activity 才能使用 BluetoothAdapter?
解决方案
权限和发现需要一个活动,因为它们需要用户输入。总的来说,其余的蓝牙 API 不需要活动。特别是,一旦你得到一个BluetoothDevice
,实际的蓝牙 I/O 应该能够在没有活动的情况下完成。
就您而言,尚不清楚您是否真的需要在后台执行此工作,因此可能不需要服务。任何一个:
使用单个活动来完成所有这些工作,使用片段或其他东西来处理由操作栏项触发的工作;或者
是否由某个单例管理蓝牙通信,可能使用存储库模式的变体,它存在于任一活动之外
推荐阅读
- arrays - 在Google表格中提取单词和字符之间的单词
- sql - 强制 dbGetQuery 返回 POSIXct 时间戳
- .net - Linux Container .Net Core 2.2 上的 JWT 无效签名
- css - 如何在 CSS 中水平对齐多个图像
- java - 需要帮助编写一个函数来确定一个二叉树数组有多少个孩子
- reactjs - create-react-app 错误 import type * as PrettyFormat from './types' in pretty-format
- c# - 实体类型“xxx”上的属性“xxx”不能标记为可空/可选,因为该属性的类型是“短”,它不是可空类型
- javascript - 在 vueJs 中访问 refs
- centos - 使用 BIND 创建 DNS:无法访问任何服务器
- jenkins - Jenkins 流水线失败原因