Android 蓝牙accept() / connect() 与已配对的设备

2024-02-14

我在通过蓝牙连接两个 Android 设备时遇到问题,只有当它们之前已配对时才会出现这种情况。我运行一个作为服务器,另一个作为客户端。

以下是服务器端的操作顺序:

  1. 检查各种蓝牙状态(适配器可用、已启用等)。
  2. 使用我选择的预定义UUID 调用listenUsingRfcommWithServiceRecord()。
  3. 请求使设备可发现
  4. 由于可发现是异步发生的,因此我调用accept()并等待传入​​连接。

在客户端:

  1. 检查各种蓝牙状态(适配器可用、已启用等)。
  2. 对于 getBondedDevices() 中的每个设备,我将 getName() 与服务器名称进行比较。如果存在匹配项,请跳至步骤 6。
  3. 开始 BT 发现
  4. 对于每个发现的设备(请注意,此处未显示 2a 中的配对设备),将设备名称与服务器名称进行比较。如果有匹配,则转至步骤 6。
  5. 取消发现
  6. 在步骤 2 中找到的设备上,使用与服务器端使用的相同预定义 UUID 调用 createRfcommSocketToServiceRecord()。
  7. 调用 connect() 并等待它返回已连接的套接字。

当客户端和服务器之前从未配对过时,上述过程对我来说非常有效。然而,当Android将它们注册到设备列表中后,它们将不可避免地在connect()/accept()阶段超时。

我几天来一直在寻找解决方案,并尝试了很多事情,包括这个:连接到已配对的蓝牙设备 https://stackoverflow.com/questions/6760102/connecting-to-a-already-paired-bluetooth-device

反射方法对我来说也不起作用。似乎 connect() 会立即返回,但是当我尝试 getOutputStream() 时,出现异常。在accept() 方面,它甚至没有注册有人尝试连接。我非常需要一些帮助或指导来让设备在之前配对后建立连接。

以下是有关设备的一些信息:

  • 我正在两部 LG G2X 手机上测试服务器和客户端。
  • 它们都运行在Android 2.3.3上,对应API级别10。
  • 同样,在我在设置中手动取消设备配对后,上述操作有效。

提前谢谢你了。我对 Android 和蓝牙的了解大约两周了,所以如果您发现任何遗漏的步骤或最佳实践,也请指出。


在客户端中,当我尝试连接到绑定设备时,我只是在我找到的蓝牙设备上调用它BluetoothAdapter.getBondedDevices()。这不起作用。

为了正确建立蓝牙连接,我必须执行类似于以下伪代码的操作:

BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices();
BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress());

BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID);
socket.connect();

我通过完全遵循蓝牙聊天示例得出了这个答案:蓝牙聊天服务 http://developer.android.com/resources/samples/BluetoothChat/src/com/example/android/BluetoothChat/BluetoothChatService.html。为什么它在设备上不起作用getBondedDevices()超出了我的范围。也许对 Android 有更深入了解的人可以回答这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 蓝牙accept() / connect() 与已配对的设备 的相关文章

随机推荐

  • 如何解决 django 管理错误 302 问题?

    我在尝试登录 django 管理页面时不断收到错误 Watching for file changes with StatReloader Performing system checks System check identified n
  • Create React App 提供的react-scripts包需要依赖:

    项目依赖树可能有问题 这可能不是 Create React App 中的错误 而是您需要在本地修复的问题 Create React App 提供的react scripts包需要依赖 babel eslint 9 0 0 不要尝试手动安装它
  • 绑定到窗口高度和宽度的问题

    当我尝试将窗口的高度和宽度绑定到视图模型中的属性时 遇到一些问题 这是一个小示例应用程序来说明该问题 这是app xaml xs中的代码 public partial class App Application protected over
  • Java如何将单引号和双引号编码为HTML实体?

    我该如何编码 into 34 and into 39 我很惊讶 HTML Entities 4 0 中没有定义单引号和双引号 所以StringEscapeUtils无法将这两个字符转义到各自的实体中 还有其他与字符串相关的工具可以做到这一点
  • 当主体可以相对定位时,如何计算 dom 元素的页面位置?

    当我将主体设置为具有 39 像素边距的相对定位元素 我正在为页面顶部的工具栏腾出空间 时 我有一个奇怪的错误开始出现 无论如何 如果您查看大多数网站如何告诉您计算页面元素位置 您将看到如下代码 function getPos elt var
  • Chrome android 高度/滚动问题与页脚和地址栏

    这是我遇到的一个有趣的情况 您正在使用 Android 版 Chrome 当您滚动正文时 地址栏会消失并隐藏 伟大的 现在您想要向页面添加一个固定在底部的页脚 您执行以下操作 html margin 0 padding 0 height 1
  • 画布 ArcTo 混乱

    所以我再次处理环形扇区 这不是我的强项 我可以使用 arc画布上的方法很好 问题来自于需要我的弧线成为路径的一部分 例如 ctx save ctx arc centerX centerY radius startAngle endAngle
  • 使用面向 Net Standard 的 DotNet Core 创建 Azure WebJob 失败并出现错误

    我有一个 dot net core 控制台应用程序 我想在 Azure 中作为 webjob 运行 当它尝试执行时 我在日志中看到 错误 找不到依赖项清单中指定的程序集 程序包 Microsoft DotNet InternalAbstra
  • 简单的 jQuery、PHP 和 JSONP 示例?

    我面临着同源策略问题 通过研究该主题 我发现对于我的特定项目来说 最好的方法是使用 JSONP 来执行跨源请求 我一直在读IBM 的这篇关于 JSONP 的文章 http www ibm com developerworks library
  • R 中多个条件的高效条件求和

    我正在努力寻找解决以下问题的有效解决方案 我有一个大型的已处理数据框 大约有 8 列和 80000 行 通常包含多种数据类型 如果满足大数据框中的条件 我想创建一个新的数据框 其中包含一列的总和 想象一下原始数据帧的头部看起来像这样 yea
  • 有开源的pastebin吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我经常编写 wiki 页面或设置需要与其他开发人员共享的配置文件 是否有任何可以安装在您自己的网络中的
  • 访问表达式树中与子项(列表)相关的属性

    我为我的实体创建了一个存储库Master 在存储库中 我有一个Get使用 Entity Core 通过 Id 获取实体的方法 该方法接收 public TEntity Get object id params Expression
  • 仅将一个文件夹重定向到 HTTPS,将所有其他文件夹重定向到 HTTP

    我提前向您道歉 因为我问了一些已经在 SO 上多次回答过的问题 但我无法修改任何答案以适用于这种情况 我有一个 secure 文件夹 需要将其重定向到 HTTPS 该文件夹之外的所有内容都应重定向到 HTTP 我计划使用绝对链接在我的网站中
  • 谷歌认证流程

    我正在尝试编写一个本机应用程序来访问用户的谷歌日历 我正在尝试使用谷歌提供的示例来获得身份验证 但它似乎从未触发身份验证功能 private void Window Initialized object sender EventArgs e
  • PySerial 从 Arduino 读取线路的延迟

    我正在使用带有基本 DigitalReadSerial 设置的 arduino uno 如下所述 http arduino cc en Tutorial DigitalReadSerial http arduino cc en Tutori
  • 如何合并两个具有不同日期时间索引的 pandas 时间序列对象?

    例如 我有两个不相交的时间序列对象 ts1 Date Price 2010 01 01 1800 0 2010 01 04 1500 0 2010 01 08 1600 0 2010 01 09 1400 0 Name Price dtyp
  • 创建 dag run 时将参数传递给 Airflow Experimental REST api

    看起来 Airflow 有一个实验性的 REST api 允许用户使用 https POST 请求创建 dag 运行 这太棒了 有没有办法通过 HTTP 将参数传递给 create dag 运行 从官方文档来看 发现here https a
  • 为什么我无权写入外部存储上的应用程序目录?

    TL DR 问题摘要 我的 Android 应用程序尝试write到应用程序的外部存储目录在 SD 卡上 它失败了权限错误 但是相同的代码 方法 提取到最小的测试应用程序中 会成功 由于我们的目标 API 级别包括 KitKat 及更高版本
  • Visual Studio 2019 - 错误 MSB8020:找不到 Visual Studio 2013 的构建工具

    这是GitHub https github com brookhong KeyCastOW我尝试使用的页面msbuild exe只是它抛出以下错误 1 gt Build started Project keycastow Configura
  • Android 蓝牙accept() / connect() 与已配对的设备

    我在通过蓝牙连接两个 Android 设备时遇到问题 只有当它们之前已配对时才会出现这种情况 我运行一个作为服务器 另一个作为客户端 以下是服务器端的操作顺序 检查各种蓝牙状态 适配器可用 已启用等 使用我选择的预定义UUID 调用list