Android互联网支票(非网络支票)

Android互联网支票(非网络支票)

问题描述:

所以这是一个相当的启示 - 事实上,Android SDK似乎没有可靠的方式来检查互联网接入。Android互联网支票(非网络支票)

请允许我澄清。

Android文档&大多数在线样品用在这里发现了类似的一个办法:https://*.com/a/4009133/980917

类似的东西来:

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    return netInfo != null && netInfo.isConnectedOrConnecting(); 
} 

但是 - 这只是检查,如果您连接到网络并且不保证你可以到达互联网。

对于那些没有意识到这一点,通过从路由器上拔下“IN”以太网电缆或连接到任何未连接到互联网的Wifi,它很容易重现。

KNOWN的变通办法:

1)试图达成一个网站:https://*.com/a/5803489/980917 这是问题,因为需要线程管理。

2)尝试ping Google的DNS:https://*.com/a/27312494/980917 不需要用线程封装,但会冻结UI。

我正在寻找:

理想情况下,我想有一个互联网检查,这是一个实用工具类,一个简单的静态方法,可以从UI或业务逻辑代码调用。由于上述解决方案不能很好地工作,因为在调用者类中需要额外的开销来处理线程管理。

有没有什么办法可以在Android上获得可靠的互联网检查而不会用线程管理代码污染调用者类?

谢谢。

我做了一个special class for this与一组静态mehods。它有很好的知识,并在你的问题方法中显示,以检测网络是否可用。它还有一个方法来检查目标服务器/主机是否可以通过这个网络到达 - checkIsServerReachable()。然而,由于它的网络任务,它不能在UI线程上运行,所以这里唯一的方法是使用AsyncTask,线程或回调。

+0

感谢您 - 将尝试它。很好的实现已知的方法。我开始接受,我将不得不做一些重构,以确保所有的互联网检查不会在UI线程上运行。 – AlexVPerl 2015-04-02 19:40:52

+0

嗨,再次 - 我正在整合连接助手类,你有一个快速使用的例子,你可以提供?谢谢! – AlexVPerl 2015-04-04 23:17:22

+0

谢谢我结束了使用checkHostByConnection() - 这工作最好的解决方案。 – AlexVPerl 2015-04-05 15:33:19