0
我正在构建一个应用程序,该服务器是我的Raspberry pi的服务器。 我的android应用程序发送数据到服务器并获取发送命令的响应。 树莓派可以随时产生中断,并将其发送到Android应用程序。我想创建一个永远不会死的服务,并且应该始终不停地听取覆盆子派发送的中断。永不终止服务,通过UDP数据的某个IP地址的端口听到传入的数据
package com.example.test;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.SocketException;
import java.util.Timer;
import java.util.TimerTask;
/**
* This is a service that will never stop and will again restart if it gets killed
*/
public class WifiUnstoppableService extends Service{
private static final String TAG = WifiUnstoppableService.class.getSimpleName();
private Timer mTimer = null;
private String result = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mTimer = new Timer();
mTimer.schedule(timerTask, 2000, 2 * 2000);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
} catch (Exception e) {
e.printStackTrace();
}
Thread thread = new Thread(){
@Override
public void run() {
while (true){
try {
DatagramSocket socket = new DatagramSocket(null);
InetSocketAddress address = new InetSocketAddress("192.168.42.1", 5001);
socket.bind(address);
try {
byte[] receiveData = new byte[2048];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String receivedPacket = new String(receivePacket.getData());
Log.d(TAG, receivedPacket);
socket.close();
}catch (NumberFormatException e){
e.printStackTrace();
}
}catch (SocketException e){
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
};
thread.start();
return super.onStartCommand(intent, flags, startId);
}
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
}
};
@Override
public void onDestroy() {
super.onDestroy();
try {
mTimer.cancel();
timerTask.cancel();
} catch (Exception e) {
e.printStackTrace();
}
Intent intent = new Intent("com.test.interruptReceiver");
sendBroadcast(intent);
}
}
But this is not working.
Can anyone help me with what am I doing wrong.
你能指定你的问题吗?并清楚地说明问题? – Lepidopteron