Gerätesuche im lokalen Netzwerk
Ich bin derzeit an der Entwicklung einer android-app mit SDK >= 16, die sollten in der Lage sein zu entdecken, verschiedene android-Geräte (später auch iOS-Geräte) in ein lokales Netzwerk mit dem WLAN-radio.
Meine erste Vermutung war der Einsatz von multicast, die sich als nicht funktionsfähig auf meinem Samsung Galaxy S2: Pakete nur empfangen, beim senden aus dem gleichen Gerät.
Meine zweite Vermutung ist, aktiv Scannen Sie das Netzwerk mit einer begrenzten IP-Adressbereich ein, und warten Sie für eine angemessene Reaktion. Leider, dies bedeutet, dass das Netzwerk verwendet DHCP-Adresse die IP-Adressen.
Keine der oben genannten Lösungen scheinen die perfekte Lösung.
Meine aktuelle Lösung für meine erste Vermutung:
public class MulticastReceiver extends AsyncTask<Activity, Integer, String> {
private static final String host = "224.1.1.1";
private static final int port = 5007;
private static final String TAG = "MulticastReceiver";
protected String doInBackground(Activity... activities) {
WifiManager wm = (WifiManager)activities[0].getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wm.createMulticastLock("mydebuginfo");
multicastLock.acquire();
String message = "Nothing";
if (multicastLock.isHeld()) {
Log.i(TAG, "held multicast lock");
}
try {
InetAddress addr = InetAddress.getByName(host);
MulticastSocket socket = new MulticastSocket(port);
socket.setTimeToLive(4);
socket.setReuseAddress(true);
socket.joinGroup(addr);
byte[] buf = new byte[5];
DatagramPacket recv = new DatagramPacket(buf, buf.length, addr, port);
socket.receive(recv);
message = new String(recv.getData());
socket.leaveGroup(addr);
socket.close();
} catch (Exception e) {
message = "ERROR " + e.toString();
}
multicastLock.release();
return message;
}
}
Dieser code führt zu Sperrung auf der line-Buchse.receive(recv); Wenn ich eine Zeit angeben, bekomme ich eine timeout-exception.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out http://developer.android.com/training/connect-devices-wirelessly/index.html Er nennt zwei Wege, die Suche nach lokalen Dienstleistungen - NSD und wifi direct.
Überprüfen Sie meine Antwort auf sehr ähnliche Frage Android Netzwerk-Discovery-Dienst (ish) vor API-14
Ich nicht glauben, dass der multicast funktioniert nicht auf Galaxy S2, vor einiger Zeit, ich war Kodierung einige Netzwerk-Anwendung, ich habe mehrere Tests auf viele Geräte, die zum Teil älter wie G1 aber auch auf dem S2, S3 und Galaxy Tab 10.
Aber nutzen zu können-multicast müssen Sie aktivieren programmgesteuert.
Haben Sie dieses Stück code?