Android 移动电话AT命令集模拟器:响应代码的正确语法

Android 移动电话AT命令集模拟器:响应代码的正确语法,android,bluetooth,gsm,Android,Bluetooth,Gsm,我们有一些传统的硬件,通过蓝牙使用DUN模式连接到手机。然后,它发出AT命令来读取SMS以进行监视 安卓手机不支持AT over DUN。这就是我写这个申请的原因。问题是:虽然传统硬件将连接到手机,但它不会接受我对其命令的响应。具体来说,它似乎不接受我对AT+CGMI命令的回答。我假设我使用的CR和LF控制字符有问题,但我不知道发生了什么 下面是一个聊天日志示例: 10-14 14:14:49.674: DEBUG/PROG(2663): Server started, object is an

我们有一些传统的硬件,通过蓝牙使用DUN模式连接到手机。然后,它发出AT命令来读取SMS以进行监视

安卓手机不支持AT over DUN。这就是我写这个申请的原因。问题是:虽然传统硬件将连接到手机,但它不会接受我对其命令的响应。具体来说,它似乎不接受我对AT+CGMI命令的回答。我假设我使用的CR和LF控制字符有问题,但我不知道发生了什么

下面是一个聊天日志示例:

10-14 14:14:49.674: DEBUG/PROG(2663): Server started, object is android.bluetooth.BluetoothServerSocket@44f102f8
10-14 14:17:07.264: DEBUG/PROG(2663): From Device:ATE0
10-14 14:17:07.264: DEBUG/PROG(2663): To Device: 
10-14 14:17:07.264: DEBUG/PROG(2663): OK
10-14 14:17:07.868: DEBUG/PROG(2663): From Device:ATE0
10-14 14:17:07.868: DEBUG/PROG(2663): To Device: 
10-14 14:17:07.868: DEBUG/PROG(2663): OK
10-14 14:17:10.774: DEBUG/PROG(2663): From Device:AT+CGMI
10-14 14:17:10.774: DEBUG/PROG(2663): To Device: 
10-14 14:17:10.774: DEBUG/PROG(2663): "Sony Ericsson"
10-14 14:17:10.774: DEBUG/PROG(2663): 
10-14 14:17:10.774: DEBUG/PROG(2663): OK
10-14 14:17:11.434: DEBUG/PROG(2663): From Device:ATE0
10-14 14:17:11.434: DEBUG/PROG(2663): To Device: 
10-14 14:17:11.434: DEBUG/PROG(2663): OK
10-14 14:17:12.025: DEBUG/PROG(2663): From Device:ATE0
10-14 14:17:12.025: DEBUG/PROG(2663): To Device: 
10-14 14:17:12.025: DEBUG/PROG(2663): OK
10-14 14:17:14.827: DEBUG/PROG(2663): From Device:AT+CGMI
10-14 14:17:14.827: DEBUG/PROG(2663): To Device: 
10-14 14:17:14.827: DEBUG/PROG(2663): "Sony Ericsson"
10-14 14:17:14.827: DEBUG/PROG(2663): 
10-14 14:17:14.827: DEBUG/PROG(2663): OK
10-14 14:17:15.454: DEBUG/PROG(2663): From Device:ATE0
10-14 14:17:15.454: DEBUG/PROG(2663): To Device: 
10-14 14:17:15.454: DEBUG/PROG(2663): OK
10-14 14:17:16.084: DEBUG/PROG(2663): From Device:ATE0
10-14 14:17:16.084: DEBUG/PROG(2663): To Device: 
10-14 14:17:16.084: DEBUG/PROG(2663): OK
10-14 14:17:18.444: DEBUG/PROG(2663): IOException: all aboard the failboat!
10-14 14:17:18.444: DEBUG/PROG(2663): java.io.IOException: Connection reset by peer
10-14 14:17:18.444: DEBUG/PROG(2663):     at android.bluetooth.BluetoothSocket.readNative(Native Method)
10-14 14:17:18.444: DEBUG/PROG(2663):     at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:307)
10-14 14:17:18.444: DEBUG/PROG(2663):     at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
10-14 14:17:18.444: DEBUG/PROG(2663):     at java.io.InputStreamReader.read(InputStreamReader.java:275)
10-14 14:17:18.444: DEBUG/PROG(2663):     at java.io.BufferedReader.fillBuf(BufferedReader.java:155)
10-14 14:17:18.444: DEBUG/PROG(2663):     at java.io.BufferedReader.readLine(BufferedReader.java:404)
当设备重置连接时会发生异常

下面是一些代码:

private static final String REPLY_OK = "\r\nOK\r\n";
private static final String REPLY_MANUFACTURER = "\r\n\"Sony Ericsson\"\r\n\r\nOK\r\n";
private static final String ECHO_OFF = "ATE0";
private static final String GET_MANUFACTURER = "AT+CGMI";
public static String handleCommand(String command) {

if (command.equals(ECHO_OFF)) {
   return REPLY_OK;
} else if (command.equals(GET_MANUFACTURER)) {
   return REPLY_MANUFACTURER;
}
// base case
return REPLY_OK;
}
// bts is a BluetoothSocket instance
OutputStream out = this.bts.getOutputStream();
InputStream is = this.bts.getInputStream();
InputStreamReader isr  = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String currentLine = null;
while ((currentLine = br.readLine()) != null) {
    Log.d(LOGTAG, "From Device:" +  currentLine);
    String response = handleCommand(currentLine);
    Log.d(LOGTAG, "To Device: " + response);
    out.write(response.getBytes("ASCII"));
    //out.flush();
}

如何扭转局面,使用android设备模拟传统的硬件设备,连接到传统的蓝牙手机,并对该手机给出的响应进行hexdump


或者你甚至可以用安卓手机制作一种中间人代理,记录并销毁整个交易?

很好。我有一台N95。我将从我的笔记本电脑连接到N95上的DUN配置文件,并转储正在发生的事情。是的。。我通过rfcomm连接了我的笔记本电脑,并立即发现了问题。孩子们,聪明地使用BufferedReader::readLine。显然,只有在传统设备发送第二个命令时才会返回。因此,它需要在设备发送的命令之后添加一个字符。我现在从BufferedReader读取数据,并进行自己的行拆分。工作起来很有魅力。再次感谢!