Я новичок в программировании на Android, и я пишу простое приложение пошаговой игры, которая использует Bluetooth.Мое приложение состоит из Main Activity, отвечающего за запуск соединения Bluetooth и обмен некоторыми сообщениями о конфигурации, и SecondActivity, реализующего пользовательский вид с игровой картой.Я могу правильно соединить устройства и обмениваться информацией между ними даже в пользовательском представлении, проблема в том, что в настраиваемом представлении я буду ждать получения информации, не блокируя поток пользовательского интерфейса, в данный момент я ожидаю получения данных таким образом
Пользовательское представление
state = bluetoothService.getState();
while(state != NOT_EMPTY){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
state = bluetoothService.getState();
}
info = bluetoothService.getMessage();
это, очевидно, вызывает черные экраны и не отвечает, есть ли другой способ ожидания получения данных?
Управление соединением осуществляется через BluetoothServiceкласс с потоками, тот, который заботится о чтении данных, делает это
private class ConnectedThread extends Thread {
private final BluetoothSocket mSocket;
private final InputStream mInStream;
private final OutputStream mOutStream;
public ConnectedThread(BluetoothSocket socket) {
mSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = mSocket.getInputStream();
tmpOut = mSocket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
mInStream = tmpIn;
mOutStream = tmpOut;
}
public void run(){
byte[] buffer = new byte[1024];
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
// Read from the InputStream
try {
bytes = mInStream.read(buffer);
if(bytes != 0) {
String incomingMessage = new String(buffer, 0, bytes);
message = incomingMessage;
mState = NOT_EMPTY;
}
} catch (IOException e) {
break;
}
}
}
}
//getMessage method just returns message if not null