【发布时间】:2014-11-18 17:11:38
【问题描述】:
我想写一个在通知栏中显示互联网速度的应用程序,我尝试了这段代码,但它现在只显示链接速度而不是实际速度
WifiInfo wifiInfo = wifiManger.getConnectionInfo();
int speedMbps = wifiInfo.getLinkSpeed();
我怎样才能获得确切的互联网速度投掷 wifi 或 3G ?
【问题讨论】:
标签: android
我想写一个在通知栏中显示互联网速度的应用程序,我尝试了这段代码,但它现在只显示链接速度而不是实际速度
WifiInfo wifiInfo = wifiManger.getConnectionInfo();
int speedMbps = wifiInfo.getLinkSpeed();
我怎样才能获得确切的互联网速度投掷 wifi 或 3G ?
【问题讨论】:
标签: android
起初,我以为您的意思是您对查看最大下载/上传速度感兴趣,例如 Speedtest.net 提供的信息。现在我相信您的意思是您有兴趣获取当前的网络流量使用情况。我将与我最初的假设相关的解释留在了底部。
新答案(如果您有兴趣获取当前的上传/下载流量):
查看TrafficStats 类。这具有诸如getMobileRxBytes() 和getMobileTxBytes() 之类的函数,它们分别给出了自启动以来接收和传输的字节数。您可以每秒获取这些值,然后进行计算以找出每秒的差异(或“每秒字节数”)。
// set this to true when you want it to stop
boolean mStopHandler = false;
Runnable runnable = new Runnable() {
@Override
public void run() {
// complete calculations
if (!mStopHandler) {
mHandler.postDelayed(this, 1000); //runs every second
}
}
};
// begin task
mHandler.post(runnable);
原始答案(假设您对最大下载/上传速度感兴趣):
这不可能以您想要的方式进行。互联网速度是您的设备与您指定的目标服务器之间的数据传输速率。当您访问 Speedtest.net 时,您正在向他们的服务器发送信息并尽可能快地从他们的服务器接收信息,它会告诉您它正在检测的速率。为了能够查看实时速度统计数据,您需要不断与远程服务器通信。 (此外,此服务器需要能够比客户端更快地下载和上传,否则您最终会测试服务器互联网连接的最大传输速率,而不是客户端的!)。
【讨论】:
end up testing the speed of the server and not the client!。但这不是OP想要的。你不是想说:end up testing the speed of the server or the client and not the internet line!。服务器和客户端都应该能够比传输速度更快地处理数据以测量互联网速度。
试试这个代码,我在我的应用中使用它
public class MainActivity extends AppCompatActivity {
final double [] RXOld = new double [1];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
////////////////////////Code to be executed every second////////////////////////////////////////
double overallTraffic = TrafficStats.getMobileRxBytes();
double currentDataRate = overallTraffic - RXOld [0];
TextView view1 = null;
view1 = (TextView) findViewById(R.id.view1);
view1.setText("Current Data Rate per second= " + currentDataRate);
RXOld [0] = overallTraffic;
handler.postDelayed(this, 1000);
}
}, 1000 );
【讨论】:
您可以在以下位置获得答案:Getting data speed of wifi/mobile network programatically。 没有任何方法可以直接返回网络的真实速度。
【讨论】: