将接收的字节转换为KB / MB - Android

问题描述 投票:0回答:2

我使用下面的代码来显示传输和接收的字节:

public class MainActivity extends Activity {        
    private Handler mHandler = new Handler();
    private long mStartRX = 0;
    private long mStartTX = 0;
    private final Runnable mRunnable = new Runnable() {
        public void run() {
            TextView RX = (TextView) findViewById(R.id.RX);
            TextView TX = (TextView) findViewById(R.id.TX);
            long rxBytes = TrafficStats.getTotalRxBytes() - mStartRX;
            RX.setText(Long.toString(rxBytes));
            long txBytes = TrafficStats.getTotalTxBytes() - mStartTX;
            TX.setText(Long.toString(txBytes));
            mHandler.postDelayed(mRunnable, 1000);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mStartRX = TrafficStats.getTotalRxBytes();
        mStartTX = TrafficStats.getTotalTxBytes();

        if (mStartRX == TrafficStats.UNSUPPORTED
            || mStartTX == TrafficStats.UNSUPPORTED) {
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Uh Oh!");
            alert.setMessage("Your device does not support traffic stat monitoring.");
            alert.show();       
        } else {
            mHandler.postDelayed(mRunnable, 1000);  
        }
    }
}

但我想添加单位(即KB,MB,GB)。例如,如果数据使用量小于1MB,则应以KB为单位显示,并且应分别更改为MB和GB。

android
2个回答
0
投票

这段代码适用于RX:

long rxBytes = TrafficStats.getTotalRxBytes() - mStartRX;
RX.setText(Long.toString(rxBytes) + " bytes");
if(rxBytes>=1024){
    //KB or more
    long rxKb = rxBytes/1024;
    RX.setText(Long.toString(rxKb) + " KBs");
    if(rxKb>=1024){
        //MB or more
        long rxMB = rxKb/1024;
        RX.setText(Long.toString(rxMB) + " MBs");
        if(rxMB>=1024){
            //GB or more
            long rxGB = rxMB/1024;
            RX.setText(Long.toString(rxGB));
        }//rxMB>1024
    }//rxKb > 1024
}//rxBytes>=1024

它假设totalRX是字节,并且set的文本随单位变深,如果大小满足(KB,MB,GB),如果它适用于你,则设置文本,使用相同的TX代码。

注意:如果您不喜欢多个setText()调用,您可以声明临时变量,对于sizeunit填充它们,当您在if-statements更深入然后setText()一次低于主要if-statement

RX.setText(Long.toString(size) + " " + unit);

5
投票

用这个

 public static String getFileSize(long size) { 
    if (size <= 0)
     return "0";
     final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
     int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); 
    return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.