android - 在 Android 中检测有限的网络连接?

标签 android networking wifi connectivity

关于如何在 Android 中检测网络连接存在许多问题。 https://stackoverflow.com/a/4239019/90236提供了非常详细的答案和https://stackoverflow.com/a/8548926/90236展示了识别连接到的网络类型的方法。

我们使用类似于以下答案的代码检测网络连接:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

这让我们可以在用户离线时发出警告。但是,它无法帮助我们确定用户的连接是否受限。在某些情况下,连接受限会导致用户提示。这些包括:

  1. 用户已连接到家庭 wifi 网络,但电缆调制解调器或互联网服务不可用。

  2. 用户在酒店或咖啡店并成功连接到 wifi 网络,但网络要求他们在获得完全网络访问权限之前登录或同意服务条款。

在这两种情况下,我们的 isNetworkAvailable() 测试都会返回 true。操作系统告诉我们已连接到网络。但是,用户没有可用的互联网连接。

有没有一种好方法可以确定用户是否拥有功能齐全的网络连接?

我正在考虑调用轻量级 Web 服务来验证其连接性,并在应用未从该服务获得有效返回时警告用户。这是矫枉过正吗?还是其他人不得不求助于类似的技术?

最佳答案

Is there a good way to determine that the user has a fully functioning network connection?

尝试从某个地方下载一些东西。理想情况下,“某处”是您自己的服务器,用于测试设备和您的服务器之间的连接。

唉,ConnectivityManager 上没有doesTehConnexionSuck()iCanHazBandwidth() 方法。 :-)

Is this overkill?

本着“金发姑娘和三只熊”的精神,我将其描述为 justrightkill。

我们必须做the same sorts of shenanigans in Web apps也是。

关于android - 在 Android 中检测有限的网络连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821825/

相关文章:

java - 为什么当我的应用程序关闭时,我必须双击通知才能将其关闭?

java - 将字符串转换为消息对象 Android 应用程序

Java并发,在父线程中访问socket

linux - 如何从 Linux 命令行使用 curl 发送数据?

android - 辅助功能 : Talkback, WebView 和用户的区域设置

Android应用重新打包: Why does it not break the code?

iphone - 是否可以在我的 iOS 应用程序中在 WiFi 和 3G 之间切换?

android - 如何解决 "enter the password for credential storage"问题?

java - 无法安装新软件/检查更新 eclipse

Java IOException Stream 在服务器客户端程序中关闭