【问题标题】:Network online monitoring [duplicate]网络在线监控 [重复]
【发布时间】:2013-10-08 19:46:56
【问题描述】:

有问题,我想监控互联网连接。

BradcastReceiver 有一个很好的方法来处理 android.net.conn.CONNECTIVITY_CHANGE 操作。但这还不够。

我想知道何时可以访问互联网。例如: 如果我从路由器断开 wan 线,我希望我的应用程序注意到它并告诉我,尽管连接了 wifi,我仍处于“离线”状态。

那么,有没有一些默认的 android 解决方案,或者我应该让线程女巫重复 ping 到某个主机?还是别的什么?

谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    你根本无法做你想做的事。由于某种原因,互联网上任何地方的连接都可能被破坏——你无法知道这一点。

    如果您需要知道是否可以到达特定地址,那么唯一可靠的方法是使用心跳信号 - Ping 或持续连接上的常规流量。

    【讨论】:

    • 不完全是事实:见stackoverflow.com/questions/6493517/…;虽然这可能仍然不能保证访问所需的端点... :)
    • 为什么正确的答案比 ping 到同一个地址更好?
    • @Trinimon 对您提出的问题的回答与我在这里所说的差不多。
    • @MartasSan 并非所有服务器都会响应 ping,尽管它们会响应正确的连接。 HTTP 可能是最常见的,但它有点重量级,因为它使用 TCP - 因此建议使用持久连接。如果目标机器上有可用的响应器,则发送 UDP 数据包会更轻松。
    • @Mike W:我的评论与“你根本无法做你想做的事”有关。 - 不正确的部分;)...链接的答案还提供了一些不错的代码。
    【解决方案2】:

    据我所知,没有简单的方法可以测试 Internet 是否可以访问。您可以反复 ping 到某个主机,但这不是一个好习惯。这是非常耗电的方法。当您的应用发出请求但失败时,您应该考虑无法访问 Internet,并显示适当的 toast 消息、屏幕或其他内容。另外,我建议您查看一些编写良好的应用程序,例如 Google Play 商店,看看它们如何解决这些问题。至少这是我所做的:)

    【讨论】:

    • 谢谢,我想我也试试这个:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多