android - 如果接入点没有互联网连接,则无法 ping 网关

标签 android sockets android-wifi

在我的应用程序中,我通过 WifiManager 以编程方式连接到无法访问互联网的接入点和 WifiConfiguration .稍后我必须访问连接到它的设备来读取数据——但我没有走那么远。

连接到 Wifi 后,我的 DHCP 设置就很好了,但是如果我尝试通过键入以下命令来 ping 网关地址:

$ adb shell
OnePlus6:/ $ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1015ms

网关无法访问...

我怀疑这与 Android(9?)在“死”Wifi 到移动数据的情况下将所有流量重新路由到移动数据的事实有关 - 例如,您仍然可以正常浏览互联网。

您可以像这样轻松复制问题:
  • 连接到无互联网接入的接入点
  • 检查您的互联网是否仍然可用(例如,访问 google.com)
  • 通过 adb 连接您的电话并ping你的AP地址

  • 关于如何通过 Wifi 强制流量的任何想法,即使它是“离线”的?

    编辑:ip route show 的输出:
    OnePlus6:/ $ ip route show
    10.16.52.64/29 dev rmnet_data0 proto kernel scope link src 10.16.52.67 
    192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.116 
    

    最佳答案

    好的,我找到了解决方案。必须将当前进程绑定(bind)到正确的网络,可以这样完成:

    connectionManager = (ConnectivityManager) 
    context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkRequest.Builder request = new NetworkRequest.Builder();
    request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    connectionManager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() {
        public void onAvailable(Network network) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                connectionManager.bindProcessToNetwork(network);
            } else {
                ConnectivityManager.setProcessDefaultNetwork(network);
            }
        }
    });
    

    关于android - 如果接入点没有互联网连接,则无法 ping 网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760719/

    相关文章:

    java - 模拟器 : glClear:466 GL err 0x502

    android - 有什么方法可以通过 Wi-Fi 或蓝牙调试应用程序吗? [请注意,设备未通过 USB 连接]

    android - wifi连接改变了android中的 Action

    java - 正则表达式查找不区分大小写的用户名

    java - 删除当前 fragment ,并替换为新 fragment

    java - 具有正确宽高比的android textureview全屏预览

    python - 添加条件后,Python Socket无法发送

    php - 确定客户端是否已使用套接字关闭与服务器的连接

    windows - 在 Windows 中,如何找出哪个进程位于本地网络套接字的另一端?

    java - Android 如何判断 WPA key 是否不正确