日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java实时获取android网速_获取Android网速的另一种方法

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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网速的另一种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。