Android Open Source - RemoteControl U D P Listener Service






From Project

Back to project page RemoteControl.

License

The source code is released under:

MIT License

If you think the Android project RemoteControl listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package ch.sebastianhaeni.remotecontrol;
//www  . j a va 2s  . com
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class UDPListenerService extends Service {
  static String UDP_BROADCAST = "UDPBroadcast";

  DatagramSocket socket;

  private void listenAndWaitAndThrowIntent(InetAddress broadcastIP, Integer port) throws Exception {
    byte[] recvBuf = new byte[15000];
    if (socket == null || socket.isClosed()) {
      socket = new DatagramSocket(port, broadcastIP);
      socket.setBroadcast(true);
    }
    // socket.setSoTimeout(1000);
    DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
    Log.e("UDP", "Waiting for UDP broadcast");
    socket.receive(packet);

    String senderIP = packet.getAddress().getHostAddress();
    String message = new String(packet.getData()).trim();

    Log.e("UDP", "Got UDP broadcast from " + senderIP + ", message: " + message);

    broadcastIntent(senderIP, message);
    socket.close();
  }

  private void broadcastIntent(String senderIP, String message) {
    Intent intent = new Intent(UDPListenerService.UDP_BROADCAST);
    intent.putExtra("sender", senderIP);
    intent.putExtra("message", message);
    sendBroadcast(intent);
  }

  Thread UDPBroadcastThread;

  void startListenForUDPBroadcast() {
    UDPBroadcastThread = new Thread(new Runnable() {
      public void run() {
        try {
          InetAddress broadcastIP = InetAddress.getByName("255.255.255.255");
          Integer port = 11111;
          while (shouldRestartSocketListen) {
            listenAndWaitAndThrowIntent(broadcastIP, port);
          }
        } catch (Exception e) {
          Log.i("UDP", "no longer listening for UDP broadcasts cause of error " + e.getMessage());
        }
      }
    });
    UDPBroadcastThread.start();
  }

  private Boolean shouldRestartSocketListen = true;

  void stopListen() {
    shouldRestartSocketListen = false;
    socket.close();
  }

  @Override
  public void onCreate() {

  };

  @Override
  public void onDestroy() {
    stopListen();
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    shouldRestartSocketListen = true;
    startListenForUDPBroadcast();
    Log.i("UDP", "Service started");
    return START_STICKY;
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

}




Java Source Code List

ch.sebastianhaeni.remotecontrol.KeyboardActivity.java
ch.sebastianhaeni.remotecontrol.MouseActivity.java
ch.sebastianhaeni.remotecontrol.MyEditText.java
ch.sebastianhaeni.remotecontrol.NetworkThread.java
ch.sebastianhaeni.remotecontrol.ServerSelectionActivity.java
ch.sebastianhaeni.remotecontrol.UDPListenerService.java
ch.sebastianhaeni.remotecontrol.VolumeActivity.java