在我的应用程序中,我通过 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 到移动数据的情况下将所有流量重新路由到移动数据的事实有关 - 例如,您仍然可以正常浏览互联网。
您可以像这样轻松复制问题:
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/