java实时获取android网速_获取Android网速的另一种方法
之前,在LOSP4.2上使用的是Android自帶的接口來實現獲取網速并顯示在通知欄,可是到了4.3以后發現這個接口無論如何,返回值都是-1,無奈之下只得另尋辦法
功夫不負有心人,我還是找到了一個方法。在Linux中, /proc/net/dev 這個路徑,保存了當前網絡的所有狀態,我們把它用cat命令讀取出來,格式是這樣的:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
dummy0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet0: 1386 33 0 33 0 0 0 0 17664 120 0 0 0 0 0 0
rmnet1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip6tnl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
可以看到,這個文件中保存的信息,首列是設備名,這個我們可以忽略,第一列是接收到的總流量。
這不就是我們苦苦尋覓的東西嗎?既然Android自帶的取總流量接口函數返回-1,那我們可以直接讀取設備來獲取啊!
說干就干,在 Traffic.java 中新增一個函數:
private int getTotalReceivedBytes() {
String line;
String[] segs;
int received = 0;
int i;
int tmp = 0;
boolean isNum;
try {
FileReader fr = new FileReader("/proc/net/dev");
BufferedReader in = new BufferedReader(fr, 500);
while ((line = in.readLine()) != null) {
line = line.trim();
if (line.startsWith("rmnet") || line.startsWith("eth") || line.startsWith("wlan")) {
segs = line.split(":")[1].split(" ");
for (i = 0; i < segs.length; i++) {
isNum = true;
try {
tmp = Integer.parseInt(segs[i]);
} catch (Exception e) {
isNum = false;
}
if (isNum == true) {
received = received + tmp;
break;
}
}
}
}
} catch (IOException e) {
return -1;
}
return received;
}
解釋一下,上面這段代碼的作用是,用 FileReader 類來打開 /proc/net/dev 文件,然后用 BufferedReader 類來逐行讀取該文件,如果行的開頭為 rmnet (移動數據) 或 eth 或 wlan (WIFI),那么就讀取該行冒號之后的文本,再以空格分割文本,然后讀取首個不為0的數值,最后返回獲取到的總數據,該數據包含了本次WIFI和移動數據的所有流量。
然后,只需要再寫一段代碼,每隔一段時間讀取一次總流量,然后用本次和前一次的差除以間隔時間來獲取平均速度,再換算為 K/s M/s 等單位,顯示即可。
這算是一個變通的方法來實現獲取網速吧,已測試沒有問題,可以放心使用。
總結
以上是生活随笔為你收集整理的java实时获取android网速_获取Android网速的另一种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java怎么做三端_Java三端分离开发
- 下一篇: java i o不会的地方_Java I