0
私は自分のラズベリーのサーバーに接続するアプリケーションを構築しています。 私のAndroidアプリケーションは、サーバーにデータを送信し、送信されたコマンドの応答を取得します。 Raspberry piはいつでも割り込みを生成し、アンドロイドアプリケーションに送信します。私は決して死ぬべきではないサービスを作りたいと思っていますし、ラズベリーパイが送信した割り込みを常に聞き続けるべきです。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