我有一个奇怪的问题! 我正在创建一个Android应用程序来运行ELM327蓝牙适配器。它在某些设备上运行正常,没有任何问题,也不适用于其他设备。 例如,该应用程序适用于三星galaxy S6,不适用于Galaxy TAB A6。
当我说它不起作用时,它实际上有效,但是ELM327会在响应中抛出STOPPED消息......
It's either one STOPPED >
or with the answer..
50 92 STOPPED >
这不是因为ELM327而发生的。为什么?因为我测试它们都像3个不同的适配器,它们都做同样的事情...... 它发生非常不稳定,就像一旦它没有问题,下一次你看到STOPPED按摩。 `
void write(String income) {
try {
mmOutStream.write(income.getBytes());
mmOutStream.write(13);
mmOutStream.write(10);
mmOutStream.flush();
mHandler.obtainMessage(MESSAGE_WRITE, -1, -1, income).sendToTarget();
} catch (IOException e) {
Log.getStackTraceString(e);
}
}
因此,当ELM做某事时,ELM手册ELM会发送此按钮。我挑衅地不知道我在等待promt char“>”在我的代码.. 所以这是Galaxy Tab蓝牙发送一些有点可能是一个ping或什么的东西它打破了我的头。但我发现的是: 如果我把延迟作为回应然后它更稳定..我看到停止的按摩更少... 如果我喜欢那样:
mmOutStream.write(income.getBytes());
SystemClock.sleep(50);
mmOutStream.write(13);
mmOutStream.write(10);
mmOutStream.flush();
如果我喜欢,我会更多地看到停止按摩:
mmOutStream.write(income.getBytes());
SystemClock.sleep(25);
mmOutStream.write(13);
SystemClock.sleep(25);
mmOutStream.write(10);
mmOutStream.flush();`
所以这一切都可能不是因为我不等待promt char,而是因为按摩发送到设备的方式。按摩中的字符可能有不同的延迟。好吧,这一切都很奇怪。
答案 0 :(得分:0)
看起来三星Galaxy TAB A6的蓝牙模块存在问题,或者它的工作非常不稳定且不可预测...没有逻辑解释它如何传输数据。 在这里输入代码
void write(String income) {
byte Tray [] = income.getBytes();
try {
for(int i= 0; i< Tray.length; i++ ){
mmOutStream.write(Tra[i]);
SystemClock.sleep(10);
}
SystemClock.sleep(10);
mmOutStream.write(13);
// SystemClock.sleep(5);
mmOutStream.write(10);
mmOutStream.flush();
mHandler.obtainMessage(MESSAGE_WRITE, -1, -1, income).sendToTarget();
} catch (IOException e) {
Log.getStackTraceString(e);
}
}
如果我这样做会变得更稳定,有时你会得到满意的结果。但不是100%。