У меня есть приложение android, которое подключается к модулю Bluetooth для отправки и получения данных. В логе отправки c он работает нормально и отправляет данные правильно.
Переменные:
private BluetoothSocket bluetoothSocket;
private BluetoothDevice bluetoothDevice;
private static InputStream inputStream;
private OutputStream outputStream;
Подключение к модулю:
private void connectToDevice(String address) {
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard SerialPortService ID
BluetoothSocket tmp;
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
Snackbar.make(parentLayout, e.getMessage(), Snackbar.LENGTH_LONG)
.setAction("IOException", null).show();
return;
}
bluetoothDevice = device;
bluetoothSocket = tmp;
mBluetoothAdapter.cancelDiscovery();
try {
bluetoothSocket.connect();
} catch (IOException connectException) {
Snackbar.make(parentLayout, connectException.getMessage(), Snackbar.LENGTH_LONG)
.setAction("IOException", null).show();
try {
bluetoothSocket.close();
} catch (IOException closeException) {
Snackbar.make(parentLayout, closeException.getMessage(), Snackbar.LENGTH_LONG)
.setAction("IOException", null).show();
}
return;
}
try {
outputStream = bluetoothSocket.getOutputStream();
inputStream = bluetoothSocket.getInputStream();
} catch (IOException e) {
Snackbar.make(parentLayout, e.getMessage(), Snackbar.LENGTH_LONG)
.setAction("IOException", null).show();
}
}
отправка логи c:
public void SendMessage(byte Destination, byte Source, int Code, byte[] Payload) {
if (Code > 255)
Opt2_16_BIT_Code = "1";
else
Opt2_16_BIT_Code = "0";
String optionsString = Opt8_Next_Message +
Opt67_Response_Options +
Opt5_Reserved +
Opt34_Trace_Options +
Opt2_16_BIT_Code +
Opt1_Extended_Flag;
byte Options = GetBytes(optionsString)[1]; // 00100000 // 0x20
Message _Message = new Message(Destination, Source, Options, Code, Payload);
AllMessage = _Message.GetAll(); // We get the whole buffer bytes to be sent to the Hexabitz modules.
try {
outputStream.write(AllMessage, 0, AllMessage.length);
} catch (IOException e) {
Snackbar.make(parentLayout, e.getMessage(), Snackbar.LENGTH_LONG)
.setAction("IOException", null).show();
}
}
Все вышеперечисленное работает нормально, но когда я получаю данные, приложение вообще не отвечает даже в режиме отладки.
Это логика получения c, я использую AsyncTask, потому что в обычном режиме он останавливает основной интерфейс:
public static class ReceiveDataTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(String r) {
}
@Override
protected String doInBackground(String... strings) {
InputStream socketInputStream = inputStream;
byte[] buffer = new byte[256];
int bytes;
// Keep looping to listen for received messages
while (true) {
try {
bytes = socketInputStream.read(buffer); // Here its falling asleep and dosen't respond at all!
String readMessage = new String(buffer, 0, bytes);
testLBL.setText(readMessage);
// Send the obtained bytes to the UI Activity via handler
Log.i("logging", readMessage + "");
} catch (IOException e) {
Snackbar.make(parentLayout, e.getMessage(), Snackbar.LENGTH_LONG)
.setAction("IOException", null).show();
break;
}
}
return null;
}
}
Любое предложение или как я могу получить данные, Это будет поток байтов.