Android擷取網速和下載速度
Android應用裡經常使用到網路速度的顯示,特別是檔案下載和視頻緩衝的時候。今天筆者就遇到需要顯示視頻播放時的網速,用到的是TrafficStats類。
尋找資料,參考了Android流量統計TrafficStats類的使用
private void showNetSpeed() {long nowTotalRxBytes = getTotalRxBytes();long nowTimeStamp = System.currentTimeMillis();long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒轉換lastTimeStamp = nowTimeStamp;lastTotalRxBytes = nowTotalRxBytes;Message msg = mHandler.obtainMessage();msg.what = 100;msg.obj = String.valueOf(speed) + " kb/s";mHandler.sendMessage(msg);//更新介面}
思路就是每隔一個時間段就去擷取這個
時間段擷取到的
網路資料的大小,然後通過計算獲得網速值。
private long lastTotalRxBytes = 0;private long lastTimeStamp = 0;private long getTotalRxBytes() {return TrafficStats.getUidRxBytes(getApplicationInfo().uid)==TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//轉為KB}TimerTask task = new TimerTask() {@Overridepublic void run() {showNetSpeed();}};
在這裡用到的是TimerTask來定時擷取網速,並發訊息更新介面。
在啟動任務時,初始化資料
lastTotalRxBytes = getTotalRxBytes();lastTimeStamp = System.currentTimeMillis();new Timer().schedule(task, 1000, 2000); // 1s後啟動任務,每2s執行一次
可以根據需求,多久更新擷取一次網速
如果是多個任務下載,需要分別顯示網速,就可以直接通過在一定時間間隔內下載的資料大小來計算網速,方法類似。