我有一个必须在离线和在线模式下工作的应用程序。应用程序必须根据当前网络连接(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 信号强度很高,但没有/非常慢的互联网连接。所以,这对我来说也不是一个准确的解决方案。
最佳答案
如果不 ping 任何服务器,您将无法获得下载/上传速度。由于您的服务器不支持 ping,您可以使用第三方 ping 站点。
与 JSpeedTest图书馆你可以很容易地做到这一点。此库中提供了一些您想要的功能。比如
- 速度测试下载
- 速度测试上传
- 下载/上传进度监控
- 可配置的主机名/端口/uri(FTP 的用户名和密码)
- 可配置的套接字超时和 block 大小
- 配置上传文件存储
分级:
compile 'fr.bmartel:jspeedtest:1.32.1'
示例代码:
SpeedTestSocket speedTestSocket = new SpeedTestSocket();
// add a listener to wait for speedtest completion and progress
speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {
@Override
public void onCompletion(SpeedTestReport report) {
// called when download/upload is complete
System.out.println("[COMPLETED] rate in octet/s : " + report.getTransferRateOctet());
System.out.println("[COMPLETED] rate in bit/s : " + report.getTransferRateBit());
}
@Override
public void onError(SpeedTestError speedTestError, String errorMessage) {
// called when a download/upload error occur
}
@Override
public void onProgress(float percent, SpeedTestReport report) {
// called to notify download/upload progress
System.out.println("[PROGRESS] progress : " + percent + "%");
System.out.println("[PROGRESS] rate in octet/s : " + report.getTransferRateOctet());
System.out.println("[PROGRESS] rate in bit/s : " + report.getTransferRateBit());
}
});
关于android - 使用 Android 获取当前的互联网速度(移动和 Wifi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35547490/