Однако ответные сообщения от устройства OBD-II часто разбиваются на несколько сообщений, зашифровываются или отсутствуют символы.
Например, для получения полного ожидаемого значения требуется три попытки команды ati ответ:
Код: Выделить всё
Me: ati OBDII: a OBDII: 327 OBDII: 327 OBDII: 327 v1.5 > Me: ati OBDII: 1 OBDII: 1 OBDII: 1.5 >v OBDII: 1.5 > Me: ati OBDII: ELM327 v1.5 >Код: Выделить всё
Me: 010c OBDII: OBDII: 4 OBDII: 3C OBDII: 3 OBDII: 3C C OBDII: 3C OBDII: OBDII: OBDII: >Код, который я использую, почти идентичен проекту BluetoothChat (источник здесь). Я только изменил UUID для своего устройства Bluetooth и добавил возврат каретки к исходящему сообщению (согласно этому вопросу о переполнении стека).
Изменение 1 (в файле BluetoothChatService.java):
Код: Выделить всё
// Unique UUID for this application
private static final UUID MY_UUID_SECURE =
//UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final UUID MY_UUID_INSECURE =
//UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
Код: Выделить всё
// The action listener for the EditText widget, to listen for the return key
private TextView.OnEditorActionListener mWriteListener =
new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
// If the action is a key-up event on the return key, send the message
if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_UP) {
String message = view.getText().toString();
//sendMessage(message);
sendMessage(message + "\r");
}
if(D)
Log.i(TAG, "END onEditorAction");
return true;
}
};
Подробнее здесь: https://stackoverflow.com/questions/253 ... se-message