我有一个无线局域网设置,没有互联网接入 . 只是连接到它的各种其他本地WiFi设备 . DHCP配置为不返回网关或DNS服务器 . 只有IP和网络掩码 .
当我将我的机器人连接到这个无线网络AP它连接正常,但手机上的所有互联网连接都停止工作 .
我希望由于wifi没有网关设置,android应该意识到互联网无法通过该连接,而应该通过3G连接进行路由 .
我也尝试在Android手机上设置静态IP,但这没有用 .
这种设置的主要原因是Android设备可以将这个远程网络上的数据传输到基于互联网的服务器,因为它可以毫无问题地连接到本地设备 . 然而,一旦设置了wifi,3G侧就会被打破 .
关于如何解决这个问题的任何想法?
5 回答
经过一些编码和测试后,我合并了Squonk和this解决方案 . 这是我创建的类:
这是 usage :
使用代码
其中 checkMobileInternetRouting 是:
使用程序
检查是否启用了到主机的路由
如果是,则无论是否连接了wifi,都要进行通信,并且仅执行第6点(第4点将仅检查路由是否已启用而不执行任何rilevant操作) . 否则临时禁用wifi .
线程休眠约3秒,让3g连接回来
将3g路由设置为给定的URL
启用wifi
现在即使没有网络访问的wifi连接也可以调用给定的URL
结论
这有点hacky但工作正常 . 唯一的问题是这个路由有几秒的超时(如20-30),迫使你再次执行整个上述过程 . 将此超时设置为更高的值将非常好 .
从代码中,当您检测到没有连接时,您可以关闭WiFi ...
至于设置,没有(没有好的方法来检查是否确实存在普遍可靠的连接) . 但有些手机会自动执行您所描述的内容,例如我的LG P-970 .
(注意:Android在连接到WiFi时会断开与移动网络的连接,因此无法通过移动设备连接到WiFi但通过移动设备进行互联网访问,即使Linux可以这样做(使用
ip route ...
工具套件))我无法保证这会有效,因为这是我前一段时间才进行的实验 . 当无线连接网络无法通往外界时,我也有类似的需要使用3G(或其他移动网络) .
以下代码应删除wifi连接,以允许移动网络进入播放 . 你需要在整个过程中进行各种测试,然后再重新 Build wifi连接......
为此,Google在Android SDK 21中添加了一些有用的方法 .
您可以创建
NetworkRequest
:然后你可以使用
ConnectivityManager
请求这样的网络 . 例如,您希望确保所有HTTP请求都将通过具有Internet访问权限的网络传递 . 您可以通过以下方式构建Retrofit API:当您使用这样的代码片段时,请注意线程安全性 .
另外,我建议检查ConnectivityManager#bindProcessToNetwork和blog .
ConnectivityManager.NetworkCallback
是一个空类,它有several methods .你不需要编码任何东西 . 我找到了一个完全正确的应用程序 . 如果此连接没有互联网,您可以配置为自动断开与wifi的连接 .
https://play.google.com/store/apps/details?id=com.nLabs.internetconnectivity&hl=en