我有一个应用程序,必须可以在线和离线工作。应用程序必须根据当前网络连接(Wifi或数据)的互联网速度向应用服务器发出请求。
如果已连接Wifi,则可以使用此代码获取当前连接的Wifi信号强度。
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5);
或者
wifiInfo.getLinkSpeed();
如果手机互联网已连接,则可以使用监听器类获得信号强度。@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int obj = signalStrength.getGsmSignalStrength();
int dBm = (2 * obj) -113;
}
以上代码获取的是信号强度,而不是速度。那么,如何获取当前连接网络的速度?
通常,在商店或网站中找到的速度测试应用程序通过发送或下载特定文件或ping远程服务器,然后使用经过的时间计算速度来检查速度。
该应用程序服务器不支持此上传/下载或ping功能,因此我无法使用它。
那么,有没有其他替代方法可以实时检查当前互联网连接的速度?
任何提示都可能有所帮助。
PS:此链接包含用于检查当前网络连接类型的代码。但是,有些情况下我拥有满格的LTE信号但没有/非常缓慢的互联网连接。因此,这也不能成为我准确的解决方案。