我正在编写一个服务意图,它扫描网络以查找来自网络上另一台设备的 UDP 广播。当找到设备时,它会向主要活动发送一条消息,然后它会做它的事情。问题是我需要为此扫描设置某种超时,所以如果它在一定时间后没有找到设备,我可以告诉主要活动。我的第一个想法是使用倒数计时器,但它不起作用。这是扫描广播的方法的代码
public void getIP()
{
new CountDownTimer(5000, 1000){
@Override
public void onFinish() {
// TODO Auto-generated method stub
System.out.println("Timer Finished");
}
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
}
}.start();
try {
UDPSocket = new DatagramSocket(55555, InetAddress.getByName("255.255.255.255"));
UDPSocket.setBroadcast(true);
byte[] buf = new byte[512];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while(shouldContinue){
try {
UDPSocket.receive(packet);
InetAddress senderAddress = packet.getAddress();
String Sender = senderAddress.getHostAddress();
UDPSocket.close();
shouldContinue = false;
pingIP(Sender);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sendIPBack("device not found local");
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sendIPBack 只是一个向主活动返回消息的方法。知道为什么 onFinish 和 onTick 方法从不执行吗?
谢谢