我想创建一个可以通过免提协议(HFP)连接到蓝牙耳机的应用程序。我按照Android的示例进行操作,现在有了一个BluetoothSocket
及其Input and OutputStream
。在下面您可以看到我的读写方法(read方法由另一个Thread
执行)
public void read() {
while (true) {
Log.d("ME", "Waiting for data");
try { // read until Exception is thrown
numBytes = inStream.read(dataBuffer);
String str = new String(dataBuffer,0,numBytes);
msgHandler.obtainMessage(numBytes, str).sendToTarget();
} catch (Exception e) {
Log.d("ME", "Input stream was disconnected", e);
break; // BluetoothDevice was disconnected => Exit
}
}
}
public void write(byte[] bytes) {
try {
outStream.write(bytes);
outStream.flush();
Log.e("ME", "Wrote: " + new String(bytes));
} catch (IOException e) {
Log.e("ME", "Error occurred when sending data", e);
}
}
打开连接后,蓝牙耳机会通过
AT+BRSF=191
发送InputStream
。我尝试使用+BRSF:20\r
进行响应,但这是我的问题。之后,设备不会通过InputStream
发送任何其他数据。它不会出现在Exception
上-更像是设备不知道如何回复我的消息。我会发送错误的数据吗?我从here获得了所有信息:(HF =免提单元AG =音频网关)你有什么想法我做错了吗?我错过了什么吗?
编辑:这些是我的写调用:
write("+BRSF: 191\r");
write("OK\r");
最佳答案
您缺少OK
响应。根据this document,OK
代码由Windows风格的换行符(CR LF
),文字OK
和另一个换行符组成。
请注意,其他命令仅由回车符终止。有关免提协议的更多信息,您可以参考that very document you linked in your post。
示例代码:
public static final String OK = statusCode("OK")
public static final String ERROR = statusCode("ERROR")
public static String statusCode(String code) {
return "\r\n" + code + "\r\n";
}
public static String command(String cmd) {
return cmd + "\r";
}
现在,您可以在代码中使用
OK
和ERROR
作为常量,并且可以将statusCode
方法用于其他状态代码。关于android - Android通过免提协议(protocol)连接到蓝牙,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41364403/