我想创建一个方法,告诉设备是否在线。据我所知,ConnectivityManager仅告知设备是否连接到网络。这并不意味着设备已连接到互联网。为确保设备处于联机状态,我正在使用InetAddress.getByName("google.com").isReachable(3);
,但我无法在主线程上使用它。我可以创建一个单独的线程来检查连接,然后使用回调函数,但还有另一种方法吗?我不希望我的应用程序在连接之前做任何事情。你有什么解决办法?谢谢!
答案 0 :(得分:1)
试试这个:
public static boolean isOnline(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
return true;
}
return false;
}
答案 1 :(得分:1)
对于任何网络,都没有保证在没有实际发送数据的情况下检查您是否连接到端点的方法。即使设备连接到网络,有一个IP地址,最近收到的数据,例如,它并不意味着你仍然有连接。
我建议允许用户尽可能地进入您的应用程序,在建立连接时在后台将请求排队到您的服务器。如果在用户使用应用程序时连接丢失,请使用相同的框架重新发送数据。使与服务器的连接尽可能对用户透明,除非在约1分钟后无法连接