【发布时间】:2018-01-21 21:24:52
【问题描述】:
我正在尝试确定我的应用中是否存在有效的互联网连接。 我需要知道我是否可以无任何错误地访问网络,有时即使我没有互联网连接,我也会得到“真实”的响应,那是因为我仍然连接到 WiFi 但没有互联网连接。
同时,我的上网查询功能是:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
此功能仅检查我是否连接到某个 WiFi 或移动网络,而不实际检查我是否可以访问网络。
所以我添加了下一个函数:
public boolean isInternetAvailable() {
try {
InetAddress ipAddr = InetAddress.getByName("google.com");
return !ipAddr.equals("");
} catch (Exception e) {
return false;
}
}
我不知道为什么,但是这个功能总是认为我的互联网连接正常,即使我的路由器没有连接(我的网络栏上有一个黄色的小三角形,表示已连接但没有互联网连接)。
如果连接是真/假,我每次调用此函数时都尝试打印,并且在我连接时我得到真,在我拔掉路由器后我得到假 5-10 秒,然后我'又变得真实了......(没有连接到其他 WiFi 网络)
我尝试在 ADB 模拟器和实际设备上对此进行测试,但它们都崩溃了,因为即使我“离线”也尝试访问网络。
寻求帮助! 非常感谢。
【问题讨论】:
-
用
return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();替换return activeNetworkInfo != null && activeNetworkInfo.isConnected();
标签: java android connection inetaddress android-connectivitymanager