Недавно я написал небольшое приложение для Android, чтобы отправлять и получать сообщения UDP через локальную сеть.
У меня есть поток приемника UDP, который запускается для прослушивания UDP-пакетов, то, что я хочу, это кнопка, которая станет включенной в пользовательском интерфейсе, когда пакет будет принят, который содержит определенную строку данных. Я знаю, что это нужно делать с обработчиком, проблема в том, что у меня мало знаний о потоках и очень мало информации о обработчиках.
кто-нибудь сможет пролить свет на то, как обработчик может быть помещен в мой код?
благодаря
код:
android threading and handler - Изменение объектов пользовательского интерфейса из фоновой темы
public void startUDPlistener() {
// Creates the listener thread
LISTEN = true;
Thread listenThread = new Thread(new Runnable() {
@Override
public void run() {
try {
Log.i(LOG, "Listener started!");
DatagramSocket socket = new DatagramSocket(BROADCASTPORT);
socket.setSoTimeout(1500);
byte[] buffer = new byte[BUFFERSIZE];
DatagramPacket packet = new DatagramPacket(buffer, BUFFERSIZE);
while(LISTEN) {
try {
Log.i(LOG, "Listening for packets");
socket.receive(packet);
String data = new String(buffer, 0, packet.getLength());
Log.i(LOG, "UDP packet received from "+ packet.getAddress() +" packet contents: " + data);
}
catch(IOException e) {
Log.e(LOG, "IOException in Listener " + e);
}
}
Log.i(LOG, "Listener ending");
socket.disconnect();
socket.close();
return;
}
catch(SocketException e) {
Log.e(LOG, "SocketException in Listener " + e);
}
}
});
listenThread.start();
}
Простой альтернативой использованию обработчика будет использование метода runOnUiThread (...) ': http://stackoverflow.com/questions/11140285/how-to-use-runonuithread – Yjay