У меня есть две команды в Oncreate и оба отправляют данные на устройство Bluetooth. Мне нужна вторая команда, чтобы дождаться, когда строка данных будет получена от первой команды, прежде чем перейти ко второй команде. Каждая команда просто отправляет байт в BT. Я пробовал использовать цикл while true, но не работает шов и зависает в истинном выражении. Я предполагаю, что в то время как истина не позволяет обработчику срабатывать, когда в цикле. Обе команды работают отлично индивидуально, пока я не отправляю оба.Loop while true
Это код в OnCreate с обеих команд и в то время как истинное утверждение
looping=true;
intByteCount =9;
GetData(intCommand); // (Command 1)Send byte to get data on reveiver
while(looping) { // Wait add data to be received before next command
Log.d("TAG", "On Hold ? ");
}
intByteCount=160; // (command 2)
GetTitle(intCommand);
Это код в обработчике Bluetooth, который устанавливает зацикленной ложь, когда все байты были получены.
Handler h = new Handler() {
@Override
// public void handleMessage(android.os.Message msg) {
public void handleMessage(android.os.Message msg) {
byte[]readBuf = (byte[]) msg.obj;
if (intByteCount==9){
// Data is channel status and Master value
byte[] encodedBytes = new byte[5];
System.arraycopy(readBuf, 0, encodedBytes, 0, encodedBytes.length);
looping=false;
};
GetTitle и GetData в основном такие же Вот GetTitle()
private void GetData(int FixtureNumber) {
Log.d("TAG", "Value " + intArrayToInt(intArray1));
intByteCount=9; // set to receive 9 bytes
byte buffer[] = new byte[6];
buffer[0] = ((byte) 1); // Command (get data)
buffer[1] = ((byte) Master_value);
buffer[2] = ((byte) intArrayToInt(intArray1));
buffer[3] = ((byte) intArrayToInt(intArray2));
buffer[4] = ((byte) 3);
buffer[5] = ((byte) 4);
if (isBTConnected) {
try {
mmOutputStream.write(buffer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вот окончательный код, чтобы получить как данные управления
new Thread(new Runnable() {
@Override
public void run() {
intByteCount =9;
GetData(intCommand); // Send byte to get data on reveiver
//you can use a for here and check if the command was executed or just wait and execute the 2nd command
try {
Thread.sleep(1000); //wait 2 seconds
} catch (InterruptedException e) {
e.printStackTrace();
}
intByteCount=160; // Sed incoming data byte count
GetTitle(intCommand);
}
}).start();