【问题标题】:Internet Speed in android programming安卓编程中的网速
【发布时间】:2014-11-18 17:11:38
【问题描述】:

我想写一个在通知栏中显示互联网速度的应用程序,我尝试了这段代码,但它现在只显示链接速度而不是实际速度

WifiInfo wifiInfo = wifiManger.getConnectionInfo();
int speedMbps = wifiInfo.getLinkSpeed();

我怎样才能获得确切的互联网速度投掷 wifi 或 3G ?

【问题讨论】:

    标签: android


    【解决方案1】:

    起初,我以为您的意思是您对查看最大下载/上传速度感兴趣,例如 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!。服务器和客户端都应该能够比传输速度更快地处理数据以测量互联网速度。
    • 谢谢,我改写了一下。
    【解决方案2】:

    试试这个代码,我在我的应用中使用它

    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 );
    

    【讨论】:

    • 此代码仅适用于移动数据还是同时适用于 wifi 和移动数据?
    • 这段代码的作用就像一个魅力,但它只对移动数据有效。
    • 非常有帮助。
    • 这仅适用于数据而不适用于wifi,但您可以使用相同的概念并将其应用于wifi
    【解决方案3】:

    您可以在以下位置获得答案:Getting data speed of wifi/mobile network programatically。 没有任何方法可以直接返回网络的真实速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2013-02-16
      相关资源
      最近更新 更多