Multicast-Unterstützung auf Android im Hotspot / Tethering-Modus

Ich habe eine Prototyp-Android-App, die für Multicast-Pakete zu "entdecken" Clients zu kommunizieren mit zu hören ist. Die Steckdose ist ähnlich wie folgt:

InetAddress group = InetAddress.getByName("228.1.2.3"); MulticastSocket s = new MulticastSocket(4000); s.joinGroup(group); 

Das funktioniert sehr gut, wenn alle Geräte über WiFi verbunden sind. Ich möchte das mit dem Telefon als tragbaren Hotspot unterstützen. Allerdings, während alle meine Geräte scheinen, um den Hotspot korrekt zu verbinden, bekomme ich keine Multicast-Daten mehr. Ich frage mich, ob es Einschränkungen gibt, die diese Art von Kommunikation im Hotspot-Modus nicht zulassen, oder wenn es irgendeine zusätzliche Netzwerkkonfiguration gibt, die erforderlich ist, um dies zu aktivieren? Ich habe versucht, dies auf ein paar verschiedene Geräte laufen Lebkuchen und Froyo ohne Glück.

  • AlertDialog Eingabetext
  • Problem mit dem Erhalten der Kamera auf Away3DLite zu arbeiten
  • Bild Hintergrund - wie man Bild als Hintergrund wiederholen, anstatt es zu dehnen
  • Android, String-Ressource nicht gefunden
  • Google Play Top Charts App nicht mehr eingestuft nach dem Titelwechsel?
  • Android Cursor mit ORMLit in CursorAdapter verwenden
  • Android-Build-Fail 'Fehler beim Ausführen von Ant-Version'
  • Eclipse - Methode NewStringUTF () konnte nicht aufgelöst werden
  • Android Repetitive Task
  • Bestimmen Sie, welche Ansicht gerade berührt wird, während der Benutzer den Finger bewegt
  • Android: ClickableSpan in anklickbarem TextView
  • Wie man eine Audiodatei auf einem Sprachanruf in android spielt
  • 3 Solutions collect form web for “Multicast-Unterstützung auf Android im Hotspot / Tethering-Modus”

    Wie dieser Artikel zeigt: https://plus.google.com/+Chainfire/posts/9NMemrKYnCd

    MulticastSocket :: setNetworkInterface ()

    Wäre die Antwort

    Finden Sie die wlan0 eth von:

     public static NetworkInterface getWlanEth() { Enumeration<NetworkInterface> enumeration = null; try { enumeration = NetworkInterface.getNetworkInterfaces(); } catch (SocketException e) { e.printStackTrace(); } NetworkInterface wlan0 = null; StringBuilder sb = new StringBuilder(); while (enumeration.hasMoreElements()) { wlan0 = enumeration.nextElement(); sb.append(wlan0.getName() + " "); if (wlan0.getName().equals("wlan0")) { //there is probably a better way to find ethernet interface Log.i(TAG, "wlan0 found"); return wlan0; } } return null; } 

    Haben Sie einen Versuch und Lemme wissen, ob es funktioniert oder nicht im Hotspot-Modus …

    Haben Sie die offizielle Erlaubnis und erstellen Sie ein Schloss?

    Für die Erlaubnis siehe: 'CHANGE_WIFI_MULTICAST_STATE' in http://developer.android.com/reference/android/Manifest.permission.html

    Auch um eine Multicast-Sperre zu erstellen … sehen Sie bitte: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html

    Ich habe das gleiche Problem und kam mit einer Lösung durch die Kombination von @braden, @ user707606 und die vor allem die Post von Chainfire in diesem Link .

    Post in den Link ist schön, aber nicht wirklich bieten Code-Beispiele aber hier ist es. Zuerst musst du Multicast Lock erwerben, das ist für einige Android-Geräte erforderlich, hat nicht in den meisten von ihnen versucht, aber es wurde in einigen anderen Beiträgen erwähnt, also habe ich es in meinem Code aufgenommen.

    Berechtigung ist erforderlich, also fügen Sie zuerst die Berechtigungen in Ihre Manifest-Datei ein.

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

    Dann ist der zweite Schritt, um Multicast-Sperre in Ihrer Methode zu erwerben.

     /* Acquire MultiCast Lock */ WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock"); multicastLock.setReferenceCounted(true); multicastLock.acquire(); 

    Und dann finden Sie Ihre Wifi Netzwerkschnittstelle

     /** * Finds Network Interface of Wifi Ethernet. * * @return */ public static NetworkInterface findWifiNetworkInterface() { Enumeration<NetworkInterface> enumeration = null; try { enumeration = NetworkInterface.getNetworkInterfaces(); } catch (SocketException e) { e.printStackTrace(); } NetworkInterface wlan0 = null; while (enumeration.hasMoreElements()) { wlan0 = enumeration.nextElement(); if (wlan0.getName().equals("wlan0")) { return wlan0; } } return null; } 

    Später erstellen Sie einen Multicast-Sockel mit einem freien Port und stellen Sie Ihr Wifi NetworkInterface ein.

     MulticastSocket multicastSocket = new MulticastSocket(); /* Set NetworkInterface of MultiCast Socket */ NetworkInterface wifiNetworkInterface = findWifiNetworkInterface(); if (wifiNetworkInterface != null) multicastSocket.setNetworkInterface(wifiNetworkInterface); 

    Dann bleibt der Rest Ihrer Umsetzung gleich. Und sobald du mit Multicast Lock fertig bist, empfiehlt es sich, es freizugeben.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.