我试图通过 Android 中的 HFP(免提配置文件)控制具有振动功能的蓝牙手环。我已经能够连接到手环并访问输入和输出流。
我的目标是模拟来电,使蓝牙手环开始振动(这似乎是唯一的方法)。为此,我使用 AT 命令。在第 22 页https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193的蓝牙规范中,您可以看到建立服务级别连接的握手。我需要建立此连接以使用“+CIEV”命令(请参阅第 48 页的握手)。
但是当我的手环返回命令“AT+CIND=?”时 我不知道该如何回应。我找不到有关如何使用“CIND:”命令回答的任何提示。另外我不知道如何发送确认(只是“OK”吗?)。
这甚至可能是完全错误的方法。每一个建议都值得赞赏。我只在 stackoverflow 上找到了一篇在某种程度上对我有帮助的帖子,我发现的其他帖子都没有得到答复。顺便说一句,我使用的是安卓 4.1.2 的智能手机。手环支持HFP和HSP。提前致谢。
2014 年 10 月 29 日更新
=====此时通过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”不会改变任何事情......