2013-03-18 16 views
6

Primo: scusa per il mio inglese, non sono "autore nativo".Ricevi messaggio broadcast su Android

Invio un messaggio broadcast in C++ e desidero riceverlo sul dispositivo Android. Ho creato tale codice:

System.out.println("receiveBroadcast()"); 
    DatagramSocket socket = new DatagramSocket(3866); 
    socket.setBroadcast(true); 
    System.out.println("Listen on " + socket.getLocalAddress() + " from " + socket.getInetAddress() + " port " + socket.getBroadcast()); 
    byte[] buf = new byte[512]; 
    DatagramPacket packet = new DatagramPacket(buf, buf.length); 
    while (true) { 
     System.out.println("Waiting for data"); 
     socket.receive(packet); 
     System.out.println(packet.getAddress()); 
     System.out.println("Data received"); 
    } 

Funziona quando compilo come Java Standard applicazione console SE ed eseguito su un altro computer connesso alla rete. Non funziona su Android e non ho idea del perché. Su Android è solo attesa di dati, ma non lo riceve:

03-18 15:47:05.045: I/System.out(16651): receiveBroadcast() 
03-18 15:47:05.055: I/System.out(16651): Listen on /:: from null port true 
03-18 15:47:05.065: I/System.out(16651): Waiting for data 

ciò che è interessante, quando l'eseguo come standard Java Applicazione console in sistema di Windows, invece di "Listen on/:: dal porto nulla vero" io ottieni "Ascolta su 0.0.0.0/0.0.0.0 da null port true".

ho nel manifestare tale permesso:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/> 

prega, aiuto!

+0

Vedere questo - http://code.google.com/p/boxeeremote/wiki/AndroidUDP. Se lo fai funzionare, puoi rispondere alla tua stessa domanda per i futuri visitatori. – Shade

+0

Grazie per il link. L'ho scritto nei dettagli ma sfortunatamente non c'è un consiglio che risolva il mio problema. Ho provato questo codice Java su un altro PC che utilizza la comunicazione wireless e funziona anche lì. Di sicuro il problema è in Android, ma ancora non so come risolverlo. –

+0

Hai implementato il metodo getBroadcastAddress dal link? Penso che il tuo problema stia ottenendo l'indirizzo da legare. Ricorda che i phohes Android hanno in genere almeno due interfacce: WiFi e mobile. – Shade

risposta

0

So che questo è un vecchio thread ma ho pensato di condividerlo qui come in futuro potrebbe aiutare gli altri.

il famoso codice scritto here non ha funzionato per me né la soluzione di 2 sto suggerendo in quanto dipende dal dispositivo e sistema operativo

in ogni caso si può ragazzi di provare alcune di queste soluzioni:

1- creare un blocco sul vostro wifi in modo che non sarebbe stato spento dopo un certo tempo di inattività

WifiManager wifi; 
wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
WifiManager.MulticastLock mLock = wifi.createMulticastLock("lock"); 
mLock.acquire(); 

2- controllare questo link here come in alcuni casi i messaggi trasmessi sono bl bloccato dal sistema operativo

Problemi correlati