我试图控制一个蓝牙手镯振动功能通过HFP (手自由配置文件)在Android。我已经能够连接到手镯并访问输入和输出流。
我的目标是模拟一个来电,以便蓝牙手镯开始振动(这似乎是唯一的方法)。要做到这一点,我使用AT命令。在第22页的id=238193蓝牙规范中,您可以看到建立服务级别连接的握手。我需要建立这个连接才能使用"+CIEV“命令(参见握手第48页)。
但是当我的手镯返回命令"AT+CIND=?“我不知道该如何回应。对于如何使用"CIND:“命令回答,我找不到任何提示。此外,我也不知道如何发送确认(它只是“好”吗?)
这甚至可能是完全错误的做法。每一项建议都会受到赞赏。我只在堆栈溢出上找到了一个post,它在某种程度上帮助了我,我找到的其他帖子都没有回答。顺便说一句,im使用的是带有Android 4.1.2的智能手机。手镯支持HFP和HSP。提前谢谢。
更新2014年10月29日

通过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());按照协议的程序,我应该收到"AT+CIND?“命令,然后我可以发送命令"+CIND: 5,5,1,0,0,0,0,0,0“,但是.我没有收到"AT+CIND?”命令。实际上我什么也没收到。我是不是遗漏了什么?发送"OK“不会改变任何事情.
发布于 2015-02-20 14:23:17
我正忙着解决同样的问题。经过几天的反复试验,我终于开始工作了。我认为这取决于你回答高频命令的速度,以及正确的行尾(“命令”)。
这是我的DroidScript,它能工作。它没有被清理干净,但它有效。
发布于 2018-07-08 09:06:30
另外,我发现的一个例子似乎几乎奏效了,它期望响应是顶部的,并以crlf尾随:"\r\n+BRSF=20\r\n“"\r\nOK\r\n”
我自己还在努力解决剩下的问题。
发布于 2014-10-14 06:40:20
请参阅蓝牙hfp 1.5规范,在该规范中,当没有任何呼叫设置时,您可以正常地理解CIEV响应,响应可以是+CIND =1,0,0,5,5注意:这些值基于hfp规范,在来电返回时+CIEV:,ind-指示呼叫设置,值为1,然后对手链发出命令。
https://stackoverflow.com/questions/26342372
复制相似问题