Android 蓝牙连接问题

标签 android kotlin bluetooth android-jetpack-compose

我对蓝牙连接感到困惑。

前言:通过蓝牙连接 Android 设备时,您可以作为服务器或客户端进行连接

我的理解:作为服务器连接本质上意味着您的设备将托管连接。作为客户端连接意味着您正在由另一台设备托管 - 和/或您要连接的设备是主机。

我正在尝试构建一个可以通过蓝牙连接并控制设备的应用程序。我的第一个用例是我的电视。所以我想制作一个可以连接到我的电视并将其作为 Remote 控制的应用程序。我最初的想法是电视充当服务器。如果我要连接到另一部手机,那么我会想象我的设备需要成为服务器。在大多数情况下,如果我希望我的应用程序充当 Controller ,向其连接的设备发送控制信号 - 假设我的设备是客户端或服务器是否正确?

最佳答案

假设您指的是低功耗蓝牙 (BLE),那么有两种不同类型的角色决定了 Android 中的通信方式:-

中央与外围设备 - 这与连接建立和维护有关,如下所示:-

  • 外围设备负责通告其存在并接受传入连接。传感器通常属于这一类。
  • 中央设备负责扫描并与远程外围设备建立连接。手机通常属于这一类。

GATT 客户端与 GATT 服务器 - 这决定了建立连接时如何处理通信:-

  • GATT 服务器是托管所有数据的设备。同样,传感器通常属于这一类。
  • GATT 客户端是从 GATT 服务器读取数据的设备。同样,手机和计算机通常扮演 GATT 客户端的角色。

这两种角色是独立的(即 Central 可以是 GATT 服务器或 GATT 客户端,反之亦然),但在大多数情况下,Central 是 GATT 客户端。

最后,为了回答你的问题,我会让远程 Controller 同时成为中央和 GATT 客户端。这样,您的电视将始终宣传其存在并托管日期,而 Remote 则扫描/连接并读取/写入该数据。

您可以在以下链接中找到更多信息:-

关于Android 蓝牙连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68629411/

相关文章:

java - 从 SQLite 数据库加载数据到 ListView

kotlin - 结构搜索接口(interface)挂起函数调用

android - GradleException:生成签名的apk compileProdReleaseKotlin时发生内部编译器错误

android - 如果 'x' 时间已经过去,则创建一个取消 InputStream.read() 调用的线程

android - 通过蓝牙流复制后损坏的音频文件

android - OBDKey 蓝牙

java - 如何在 "Time Difference"中获取 "since/ago"?这可能不使用任何图书馆吗?

java - Realm不保存属性,对象虽然复制到Realm但不被管理

android - 已跳过 setExact 方法调用。警报未按预期触发

android - 使用 DiffUtil 和自定义适配器导致检测到不一致