Ich entwickle eine App, die WLAN verwendet, um UDP-Nachrichten zwischen allen Handys zu senden, die sich im selben Netzwerk befinden wie meine App.
Ich habe es geschafft, Pakete von vielen Handys mit einem externen AP zu senden / empfangen, das ist mein Router.
Aber in dem Fall, dass es keinen AP gibt, möchte ich, dass die Benutzer die WLAN-Hotspot-Funktion ihres Telefons verwenden können, damit sie meine Anwendung weiterhin verwenden können. Eines der Mobiltelefone wäre also der WLAN-Hotspot, und alle anderen würden sich damit verbinden.
Ich fordere, dass Benutzer sich mit einem eigenen WLAN verbinden. Entweder zu einem externen AP oder zu diesem Hotspot. Wenn meine Anwendung gestartet wird, prüft sie, ob das Telefon mit einem Wifi-Netzwerk verbunden ist und ruft WifiManager.isWifiEnabled () und NetworkInfo.isConnected () auf.
Das Problem ist, dass die Funktion isConnected () false zurückgibt, wenn ich diese Funktionen auf dem Handy anrufe, das Hotspot verwendet. Und ich kann die Broadcast-Adresse nicht mit WifiManager.getDhcpInfo () abrufen. Die anderen Telefone, die mit dem Hotspot verbunden sind, funktionieren einwandfrei. Das Hotspot-Handy kann jedoch keine Sendung senden, da WifiManager deaktiviert ist.
Also, meine Frage wäre: "Gibt es eine Möglichkeit zu überprüfen, ob ein Handy derzeit ein WLAN-Hotspot ist? Und wenn ja, gibt es eine Möglichkeit, wie ich seine Broadcast-Adresse bekommen kann?"
Zuerst können Sie überprüfen, was Ihre IP-Adresse ist:
%Vor%und ich habe diese IP verwendet, um Broadcast auf diese Weise zu erhalten:
%Vor%Es kann natürlich in einer Methode gemacht werden, aber in meiner Implementierung war es nützlich, sie in zwei Methoden zu trennen.
Um festzustellen, ob Wifi Tether aktiviert ist, können Sie diesen Code verwenden:
%Vor%Wenn Clientgeräte wissen müssen, ob das Servergerät ein mobiler Hotspot ist, kann eine bestimmte IP-Adresse verwendet werden. Soweit ich weiß, haben alle Tethering-Geräte die gleiche Adresse 192.168.43.1 Es ist das gleiche auf Android 2.3 und 4. +, auf vielen Handys und Tablets überprüft. Natürlich ist es nicht die beste Lösung, aber es ist schnell. In meiner Anwendung prüft das Client-Gerät (sendet das Paket an diese Adresse) und die Antwort meines Server-Geräts wie "yesIamInTheaterModeIamYourServer" vordefiniert.