我正在尝试通过 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”不会改变任何事情......