2017-05-05 40 views
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. 
+0

你能指定你的问题吗?并清楚地说明问题? – Lepidopteron

回答

0

实际上你不应该创建一个永无止境的服务,因为如果你创建一个,它不会正常工作,由于休眠模式。而且更重要的是,在Android O中,您严格禁止在后台无限次地运行服务。

相关问题