Android中当前的下载/上传速度

Android中当前的下载/上传速度,android,statistics,traffic,traffic-measurement,Android,Statistics,Traffic,Traffic Measurement,全部, 我是android的新手,正在开发应用程序来显示当前的下载/上传速度。我从中得到了一些提示。它使用TrafficStats.getTotalRxBytes()函数返回启动后接收的总字节数,并单调递增 所以我使用下面的代码,只显示当前可用的速度。但我没有得到结果。它仅显示Tx/Rx总值 有没有其他办法来实现这一点?任何代码片段都将非常感谢,因为我是一个完全的初学者 另外,我不能理解下面的代码。有人能解释一下吗 private final Runnable mRunnable = new R

全部,

我是android的新手,正在开发应用程序来显示当前的下载/上传速度。我从中得到了一些提示。它使用TrafficStats.getTotalRxBytes()函数返回启动后接收的总字节数,并单调递增

所以我使用下面的代码,只显示当前可用的速度。但我没有得到结果。它仅显示Tx/Rx总值

  • 有没有其他办法来实现这一点?任何代码片段都将非常感谢,因为我是一个完全的初学者

  • 另外,我不能理解下面的代码。有人能解释一下吗

    private final Runnable mRunnable = new Runnable() 
    
  • 我需要每隔一秒钟刷新textView中显示的数据。我想

      mHandler.postDelayed(mRunnable, 1000) ( );   
    
    是用来做这件事的。还有别的选择吗?如果不是,当使用PostDelayed函数时,控制流会是怎样的?(我有点困惑)

    公共类MainActivity扩展活动{
    私有处理程序mHandler=新处理程序();
    专用长mStartRX=0;
    专用长mStartTX=0;
    私有静态最终整数结果_设置=1;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    mHandler.postDelayed(mRunnable,1000);
    }
    private final Runnable mRunnable=new Runnable()
    {
    公开募捐
    {
    长TxResult=0;
    长RxResult=0;
    长or1=0,or2=0;
    long rxBytes=TrafficStats.getTotalRxBytes()-mStartRX-or1;
    如果(rxBytes1024)
    {
    //RxResult=0;
    RxResult=RxResult+(rxBytes/1024);
    }
    TextView RX=(TextView)findViewById(R.id.rxOut);
    //mStartRX=rxBytes;
    TextView TX=(TextView)findViewById(R.id.txOut);
    RX.setText(Long.toString(RxResult));
    long txBytes=TrafficStats.getTotalTxBytes()-mStartTX-or2;
    如果(txBytes1024)
    {
    TxResult=0;
    TxResult=TxResult+(txBytes/1024);
    }
    TX.setText(Long.toString(TxResult));
    or2=or2+txBytes;
    or1=or1+rxBytes;
    mHandler.postDelayed(mRunnable,100);
    }
    };
    

  • 因为我不会解决第一个问题,所以我将把它放在这里。这段代码只是创建一个线程对象,其中包含您要执行的代码,然后您将其分配给每秒执行该代码的处理程序。您可以在google上搜索更多关于线程的信息,您可以找到更深入的答案。请尝试以下代码
    public class MainActivity extends Activity {
    
    private Handler mHandler = new Handler();
    private long mStartRX =0;
    private long mStartTX = 0;
    private static final int RESULT_SETTINGS = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mHandler.postDelayed(mRunnable, 1000);
    
    }
    private final Runnable mRunnable = new Runnable() 
    {
    
          public void run() 
          {
    
            long TxResult=0;
            long RxResult=0;
            long or1=0,or2=0;
    
            long rxBytes = TrafficStats.getTotalRxBytes()- mStartRX-or1; 
    
            if (rxBytes<1024)
            {
                RxResult=0;
    
            }
           else if (rxBytes>1024)
           {
               // RxResult=0;
               RxResult=RxResult+(rxBytes/1024);
           }
           TextView RX = (TextView)findViewById(R.id.rxOut);
           //mStartRX=rxBytes;
           TextView TX = (TextView)findViewById(R.id.txOut);
           RX.setText(Long.toString(RxResult));
           long txBytes = TrafficStats.getTotalTxBytes()- mStartTX-or2;
           if (txBytes<1024)
           {
               TxResult=0;
           }
           else if (txBytes>1024)
           {
               TxResult=0;
               TxResult=TxResult+(txBytes/1024);
           }
    
           TX.setText(Long.toString(TxResult));
           or2=or2+txBytes;
            or1=or1+rxBytes;
            mHandler.postDelayed(mRunnable, 100);
    
           }
     };