【发布时间】:2018-09-15 00:22:49
【问题描述】:
基本上,我需要检查我的 Wifi 连接是否可以访问互联网。我知道最有效的方法是使用 sock.connect() 但我需要确保连接将通过 Wifi 网络完成,这是我的主要问题, 我搜索了几天,但没有很好的回应。
有很多像How do I see if Wi-Fi is connected on Android? 这样的解决方案,但它们只检查设备是否连接到路由器。我需要知道路由器是否可以上网
我的最佳近似是这样的:
Socket sock = new Socket();
ConnectivityManager
cm = (ConnectivityManager) mContext.getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
Network net = cm.getActiveNetwork();
net.bindSocket(sock);
}
sock.connect(new InetSocketAddress("8.8.8.8", 53), 1500);
sock.close();
但这有一些限制。最大的限制是仅适用于 API >= 23。 另外,如果我在中国,我认为主机名“8.8.8.8”将不起作用,对吧?
最后,如果我的设备连接到 wifi 网络,cm.getActiveNetwork() 只会成为 WIFI 网络,这并不完全正确,因为可以修改默认活动网络。
我需要知道的是:
- API >= 16 是否有任何可行的替代方案?
- 有在中国可以正常使用的好主机名吗?
任何帮助将不胜感激, 提前致谢!
【问题讨论】:
-
不,有很多类似的解决方案,但它们只检查设备是否连接到路由器。我需要知道路由器是否可以上网
标签: android