gpt4 book ai didi

Android 互联网检查(非网络检查)

转载 作者:行者123 更新时间:2023-11-29 01:34:17 25 4
gpt4 key购买 nike

所以这是一个很大的启示 - 事实上 Android SDK 似乎没有可靠的方法来检查互联网访问。

请允许我澄清一下。

Android 文档和大多数在线示例使用的方法与此处找到的方法类似:https://stackoverflow.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 可以很容易地重现。

已知的解决方法:

1) 尝试访问网站:https://stackoverflow.com/a/5803489/980917这是有问题的,因为需要线程管理。

2) 尝试 ping Google 的 DNS:https://stackoverflow.com/a/27312494/980917不需要包装在线程中,但会卡住 UI。

我在找什么:

理想情况下,我希望将 Internet 检查作为实用程序类中的一个简单静态方法,可以从 UI 或业务逻辑代码中调用。因此,上述解决方案并不能很好地工作,因为调用者类需要额外的开销来处理线程管理。

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

谢谢。

最佳答案

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

关于Android 互联网检查(非网络检查),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com