Android 通过 AT 命令与 HFP 设备通信

2024-01-02

我正在尝试通过 Android 中的 HFP(免提配置文件)控制具有振动功能的蓝牙手环。我已经能够连接到手环并访问输入和输出流。

我的目标是模拟来电,以便蓝牙手环开始振动(这似乎是唯一的方法)。为此,我使用 AT 命令。在蓝牙规格中https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193 https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193在第 22 页上,您可以看到建立服务级别连接的握手。 我需要建立此连接才能使用“+CIEV”命令(请参阅握手第 48 页)。

但是当我的手环返回命令“AT+CIND=?”时我不知道该如何回应。我找不到任何关于如何使用“CIND:”命令应答的提示。我也不知道如何发送确认(只是“确定”吗?)。

这甚至可能是完全错误的方法。每一个建议都值得赞赏。我只找到一个post https://stackoverflow.com/questions/16610811/how-to-send-at-commands-based-on-bt-hands-free-profile-in-android在 stackoverflow 上以某种方式帮助了我,我发现的其余帖子都没有得到答复。 顺便说一下,我使用的是 Android 4.1.2 的智能手机。手环支持 HFP 和 HSP。提前致谢。

更新 10/29/2014

=====此时通过RFCOMM Socket建立连接=====

        // read AT+BRSF=0 from device
        byte[] buffer = new byte[200];
        mBluetoothSocket.getInputStream().read(buffer);
        Log.d(TAG, new String(buffer).trim());

        //write answer BRSF: ...
        mBluetoothSocket.getOutputStream().write("+BRSF=20\r".getBytes());
        mBluetoothSocket.getOutputStream().write("OK\r".getBytes());

        // read AT+CIND=? command
        buffer = new byte[200];
        mBluetoothSocket.getInputStream().read(buffer);
        Log.d(TAG, new String(buffer).trim());

        //write answer CIND: ...
        mBluetoothSocket.getOutputStream().write("+CIND: (\"battchg\",(0-5)),(\"signal\",(0-5)),
           (\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0-3)),
           (\"callheld\",(0-2)),(\"roam\",(0,1))".getBytes());
        mBluetoothSocket.getOutputStream().write("OK".getBytes());

        // read AT+CIND?
        buffer = new byte[200];
        mBluetoothSocket.getInputStream().read(buffer);
        Log.d(TAG, new String(buffer).trim());

按照协议程序,我应该收到“AT+CIND?”命令,然后我可以发送命令“+CIND:5,5,1,0,0,0,0”,但是......我没有收到“AT+CIND?”命令。实际上我没有收到任何东西。我错过了什么吗?顺便说一句,发送“OK”不会改变任何事情......


我正在摆弄完全相同的问题。经过几天的反复试验,我终于成功了。 我认为这取决于你回答 HF 命令的速度,以及正确的行结尾(“COMMAND”)。

这是我的 DroidScript ,它可以工作。虽然没有清理干净,但确实有效。

https://gist.github.com/t-oster/68a568ac4c4e133f67ac https://gist.github.com/t-oster/68a568ac4c4e133f67ac

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

Android 通过 AT 命令与 HFP 设备通信 的相关文章

随机推荐

  • 如何在 Visual Studio 2013 中创建数据库项目

    我正在将包含一些 C 项目的解决方案从 Visual Studio 2008 迁移到 VS2013 迁移进行得很顺利 进行了一些调整 但是还有一个 dbp 项目 数据库项目 来自 VS2008 它拒绝在 VS2013 中迁移 加载 我在这个
  • 为什么通过 newCachedThreadPool 创建的 ExecutorService 是邪恶的?

    保罗 泰玛推介会 http paultyma blogspot com 2008 03 writing java multithreaded servers html有这一行 Executors newCachedThreadPool万恶
  • 在 OpenCV 中查找轮廓的“fitLine”

    我是一个在流中查找轮廓的程序 例如 我想找到可以描述这个轮廓的 点集 就像红线一样 黄色部分是轮廓的矩 我尝试使用fitLineopencv 的函数 但结果是无意义的 任何想法如何获得轮廓的中线 这应该代表我的 Contours 的关键方面
  • 有没有一种方法可以为 sendfile 编写不直接使用系统调用指令的 shellcode?

    我正在处理一个类似 ctf 的挑战 它正在过滤我的 shellcode 以确保我没有分别具有 syscall sysenter 和 int 指令 0x0f05 0x0f34 和 0x80cd 的十六进制值编码 基本上我有一个可以打开文件的
  • 哈希码的理解

    哈希函数对于实现哈希表很重要 我知道在java中 对象有其哈希码 该哈希码可能是由弱哈希函数生成的 以下是 补充哈希函数 的一个片段 static int hash Object x int h x hashCode h h lt lt 9
  • 使用 Node.js 提供网页时如何摆脱 .html 扩展名?

    我是 Node js 的初学者 正在使用 Express 和 ejs 布局 我想知道如何在发布页面时摆脱 html 扩展名 例如 如果我转到我的 localhost 3000 about html 这可以工作 但我希望它显示为 about
  • 无需 ctrl+空格即可自动完成

    Every time I must use CTRL SPACE for get complete variants But I need it often I need list of variants every time when I
  • 在 iOS 中将项目添加到阅读列表

    是否可以从应用程序将项目 url 添加到 Safari 中的阅读列表 我环顾四周 但只能找到信息如何手动添加 http mac tutsplus com tutorials tips shortcuts quick tip how to u
  • MVC API 控制器的复杂对象未通过 jquery ajax 调用填充

    我正在尝试调用 POST API 控制器 控制器被调用 但复杂对象是空的 我已经运行了 Fiddler 该对象甚至已经填充在那里 我究竟做错了什么 我的 C 对象 createdUser已包含 Web Api 所需的正确格式的数据 无需将其
  • 为什么我们使用完 System.out Stream 后不关闭它呢?

    我只是想知道 我们通常会在最后关闭流 但为什么我们不关闭System out打印流与System out close 如果关闭它 您将无法再写入控制台 因此当进程终止时 让我们将此任务留给虚拟机 您应该只关闭您拥有或手动创建的流 Syste
  • 在 IntelliJ IDEA 中为 scala 项目附加源

    我有一个带有 Scala 的 Playframework 2 项目 非常小的一个 它用斯卡拉异常 https github com playframework Play20 wiki ScalaAnorm图书馆 我有这样的代码 packag
  • 从 JSON 到 Avro 的 Kafka 流

    我尝试使用 Kafka Stream 将带有 String JSON 消息的主题转换为另一个主题 作为 Avro 消息 流主要方法 streamsConfiguration put StreamsConfig KEY SERDE CLASS
  • 查找关联计数大于零的所有记录

    我正在尝试做一些我认为很简单但似乎并不简单的事情 我有一个项目模型 有很多空缺 class Project lt ActiveRecord Base has many vacancies dependent gt destroy end 我
  • 如何处理服务器和本机 Android 应用程序之间的时区差异?

    假设我的服务器位于美国 而我住在俄罗斯 我们知道他们有不同的时区 我的应用程序获取文本 String 来自服务器 这个文本数据有Date数据库中的列用于保留记录日期 当我获取数据时 我也得到date知识 这样我就可以按时间对它们进行分组 第
  • 在哪里可以找到包含常见食物列表的文本列表或库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个解析电子邮件的 Python 脚本 其中涉及在电子邮件文本中搜索常见食品的任何单词 我需要某种方法来确定单词是否确实是食物
  • Java 应用程序的零停机部署

    我正在尝试构建非常轻量级的解决方案 以实现 Java 应用程序的零停机部署 为了简单起见 我们假设我们有两台服务器 我的解决方案是使用 在 前面 一些负载均衡器 软件 我在这里考虑 HAProxy 在 背面 两台服务器 都运行 Tomcat
  • 创建用于集成测试的 oauth-token

    我们希望创建一个 持久 的令牌用于集成测试目的 我们通常使用 keycloak 来创建令牌 但我不认为有可能创建没有过期的令牌 以便可以在开发阶段不间断地进行重复的集成测试 对于这种关于 oauth 的自动重复测试 您有何建议 所有访问令牌
  • 无论“delay”参数如何,Vue 异步组件都会毫无延迟地加载

    我在用高级异步组件 https v2 vuejs org v2 guide components html Advanced Async Components加载async component加载应用程序后 所以我尝试了以下代码 索引 vu
  • R SVM alpha 系数

    我正在尝试从 PMML 文件在 R 中重新创建 SVM 对象 但无法理解 R 如何存储 alpha 系数 我目前正在 iris 数据集上测试它 并使用以下命令生成了一个 R SVM 对象 library e1071 data iris mo
  • Android 通过 AT 命令与 HFP 设备通信

    我正在尝试通过 Android 中的 HFP 免提配置文件 控制具有振动功能的蓝牙手环 我已经能够连接到手环并访问输入和输出流 我的目标是模拟来电 以便蓝牙手环开始振动 这似乎是唯一的方法 为此 我使用 AT 命令 在蓝牙规格中https