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

V1n*_*3nt 5 android bluetooth at-command hfp

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

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

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

这甚至可能是完全错误的方法。每个建议都表示赞赏。我只找到一个职位上的计算器,帮助我在某些方面,我找到了帖子的其余悬而未决。顺便说一句,即时通讯使用的智能手机与Android 4.1.2。手链支持HFP和HSP。提前致谢。

更新10/29/2014

服务水平连接步骤

=====此时通过RFCOMM套接字建立的连接=====

        // 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());
Run Code Online (Sandbox Code Playgroud)

按照协议的程序,我应该收到“ AT + CIND?” 命令,然后我可以发送命令“ + CIND:5,5,1,0,0,0,0”,但是...我没有收到“ AT + CIND?” 命令。实际上我没有收到任何东西。我想念什么吗?发送“确定”不会改变任何事情...

Tho*_*ter 2

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

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

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