Aller au contenu

(urgent) Service pour écouter en continu les messages envoyées d'un PC


Mali44

Recommended Posts

Bonjour,

 

Je développe une application dans laquelle je souhaiterais recevoir des données envoyées par un PC. J'ai donc essayé de créer un service qui écoute en continu afin de voir si des messages arrivent. Je fonctionne en UDP. 

J'aimerais recevoir une notification dès qu'un message est reçu par le smartphone. Mais je ne sais pas comment procéder. Pour le moment, j'ai créé mon service que j'appelle de la manière suivant dans le oncreate de mon mainActivity :

 Intent intent = new Intent(this, UDPlisten.class);

startService(intent);

 

Et voici le code de mon service : 


import java.net.*;
import java.io.*;

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


public class UDPlisten extends Service {

	static String UDP_BROADCAST = "UDPBroadcast";
	DatagramSocket socket;


	private void listenAndWaitAndThrowIntent(int port) throws Exception {
	    byte[] recvBuf = new byte[150];
	    if (socket == null || socket.isClosed()){
	        socket = new DatagramSocket(port);
	        socket.setBroadcast(true);
	    }
	    DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
	    Log.e("UDP", "Waiting for UDP broadcast");
	    socket.receive(packet);
	    String message = new String(packet.getData()).trim();
	    Log.e("UDP", "message: " + message);

	    broadcastIntent(message);
	    socket.close();
	}
	private void broadcastIntent(String message) {
	    Intent intent = new Intent(UDPlisten.UDP_BROADCAST);
	    intent.putExtra("message", message);
	    sendBroadcast(intent);
	}
	     Thread UDPBroadcastThread;

	void startListenForUDPBroadcast() {
	    UDPBroadcastThread = new Thread(new Runnable() {
	        public void run() {
	            try {
	               // InetAddress broadcastIP =InetAddress.getByName("10.0.2.16"); 
	                int port = 4000;
	                while (shouldRestartSocketListen) {
	                    listenAndWaitAndThrowIntent(port);
	                }
	                //if (!shouldListenForUDPBroadcast) throw new ThreadDeath();
	            } 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();
	}

	@[member=override]
	public void onCreate() {
		shouldRestartSocketListen = true;
	    startListenForUDPBroadcast();
	    Log.i("UDP", "Service started");
	};

	@[member=override]
	public void onDestroy() {
	    stopListen();
	}


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

	@[member=override]
	public IBinder onBind(Intent intent) {
	    return null;
	}
}

Pour l'instant, je ne parviens à recevoir aucun message. De plus, je ne sais pas comment renvoyer le message reçu dans mon mainactivity pour pouvoir l'afficher ? avec un brodcastreceiver ?

 

Merci d'avance pour votre aide, (c'est assez urgent ..)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...