Force-Android-3G verwenden, wenn über lokales wifi ohne Netz-Zugang
Ich habe ein wifi-LAN-Konfiguration, die nicht internet-Zugang. Nur verschiedene andere lokale wifi-Geräte angeschlossen. Das DHCP konfiguriert ist, um nicht wieder ein gateway-oder dns-server. Nur eine IP-Adresse und Netzmaske.
Wenn ich eine Verbindung zu meinem android auf das wifi-AP verbindet feine, aber alle internet-verbindungen auf dem Telefon nicht mehr funktioniert.
Ich würde erwarten, dass da das wifi hat keinen gateway einstellen, dass android sollte erkennen, das internet kann nicht durch die Verbindung und sollte stattdessen geroutet werden die 3G-Verbindung, die ist bei 5 bars.
Ich habe versucht, die Einstellung einer statischen IP auf dem android-Handy so gut, aber das hat nicht geholfen.
Der Hauptgrund für dieses setup ist so, dass das android-Gerät können die Daten übertragen, die auf diesem remote-Netzwerk um einen internet-basierten server, da kann es eine Verbindung zu den lokalen Geräten, ohne Frage. Aber der 3G-Seite ist gebrochen, sobald das wifi-setup.
Irgendwelche Gedanken auf, wie man dieses Problem umgehen?
InformationsquelleAutor Stephen Hankinson | 2012-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach ein bisschen coding und Tests habe ich zusammengeführt, Squonk und diese Lösung. Dies ist die Klasse, die ich erstellt habe:
Dies ist die Nutzung:
VERWENDUNGS-CODE
wo checkMobileInternetRouting ist:
USAGE PROCEDURE
SCHLUSSFOLGERUNGEN
Dies ist etwas hacky, aber funktioniert einwandfrei. Das einzige problem ist, dass dieses routing hat ein timeout von einigen Sekunden (gerne 20-30), die Kräfte, die Sie ausführen, die gesamte oben genannte Verfahren noch einmal. Diese Einstellung timeout auf einen höheren Wert wäre sehr gut.
InformationsquelleAutor Link 88
Vom code, wenn Sie erkennen, es gibt keine Verbindung, Sie könnten schalten Sie WiFi...
Als für eine Einstellung, es ist "none" (kein guter Weg, um zu überprüfen, ob es wirklich connectivity-universell und zuverlässig). Aber einige Telefone tun genau das, was Sie beschreiben, automatisch, wie zum Beispiel mein LG P-970.
(Hinweis: Android-trennt die Verbindung zu mobilen Netzwerken wenn Sie eine Verbindung zu einem WLAN, so dass es keine Möglichkeit gibt, noch eine Verbindung zu einem WiFi aber weiterleiten von internet-Zugang über mobile, obwohl Linux kann es (mit der
ip route ...
suite von tools))P-970 ist Android. Nur mobile Daten deaktiviert ist, während auf wifi natürlich. Es könnte einen Versuch Wert sein, weist sich selbst eine link-local-IP (Apipa) aus dem Bereich 169.254.
Danke. Ich habe versucht, link-local, aber das hat nicht geholfen für mein Android. Das war sehr nützliche Informationen, aber wie ich verwenden es in ein Produkt, dass ich bin in den Prozess des Aufbaus und es löste ein Problem. Danke!
InformationsquelleAutor Peter V
Kann ich nicht garantieren, das wird funktionieren, denn es ist etwas, was ich nur damit experimentiert, vor einiger Zeit. Ich hatte ein ähnliches Bedürfnis 3G verwenden (oder andere mobile network), wenn die wifi-Netzwerk verbunden hatte keinen Weg in die Außenwelt.
Dem folgenden code löschen Sie die WLAN-Verbindung, um zu erlauben, das mobile Netz zu kommen, um zu spielen. Sie müssen verschiedene tests zu tun, auf dem Weg und neu einrichten der WLAN-Verbindung danach wieder...
Von dem, was ich gelesen habe, standard Android Verhalten deaktivieren Sie mobile internet-Verbindung, wenn eine wifi-Verbindung verfügbar ist. Das ist sicherlich der Fall mit meinem HTC Desire. Ich kam mit dem obigen code schon sehr früh in meinem Android-learning so kann es bessere Wege, Dinge zu tun, obwohl ich noch nicht gekommen, über etwas anderes mit auf den Weg.
Ja, für die spezifische Anwendung, die ich bin-targeting, dies ist wirklich schlecht Verhalten. Es ist schade, dass die android verhält sich nicht wie ein PC oder Mac in diesem Fall. Vielen Dank für den code, obwohl es wahrscheinlich in handliches kommen, irgendwann.
InformationsquelleAutor Squonk
Google hat einige nützliche Methoden, die in Android-SDK-21 für diesen Zweck.
Können Sie erstellen
NetworkRequest
:Und dann können Sie verlangen, ein solches Netz mit
ConnectivityManager
. Zum Beispiel, Sie wollen sicher sein, dass alle HTTP-Anfragen weitergeleitet werden, die das Netzwerk mit internet-Zugang. Sie können bauen Sie Ihre Retrofit-API auf diese Weise:Beachten, die thread-Sicherheit, wenn Sie mit solchen code-snippet.
Ich auch vorschlagen, um zu überprüfen, ConnectivityManager#bindProcessToNetwork und diese blog.
ConnectivityManager.NetworkCallback
ist eine leere Klasse und es hat mehrere Methoden.InformationsquelleAutor Anton Golovin
brauchen Sie nicht, um code nichts. ich fand eine app, die genau das tun, was. Sie können konfigurieren, zu trennen, automatisch aus dem WLAN, wenn es kein internet über diese Verbindung.
https://play.google.com/store/apps/details?id=com.nLabs.internetconnectivity&hl=de
InformationsquelleAutor noam