关于如何在 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();
}
这让我们可以在用户离线时发出警告。但是,它无法帮助我们确定用户的连接是否受限。在某些情况下,连接受限会导致用户提示。这些包括:
用户已连接到家庭 wifi 网络,但电缆调制解调器或互联网服务不可用。
用户在酒店或咖啡店并成功连接到 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。
关于android - 在 Android 中检测有限的网络连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821825/