Skip to content

Commit 3af7a3c

Browse files
committed
Fixed: #94 Q2:read uid_stat to get traffic info while TrafficStats return 0
1 parent 14f8fcc commit 3af7a3c

File tree

2 files changed

+48
-12
lines changed

2 files changed

+48
-12
lines changed

AndroidManifest.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.netease.qa.emmagee"
4-
android:versionCode="33"
5-
android:versionName="2.5" >
4+
android:versionCode="34"
5+
android:versionName="2.5.1" >
66

77
<uses-sdk android:minSdkVersion="8" />
88

@@ -52,6 +52,5 @@
5252
<uses-permission android:name="android.permission.INTERNET" />
5353
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
5454
<uses-permission android:name="android.permission.GET_TASKS" />
55-
<uses-permission android:name="android.permission.WAKE_LOCK" />
5655

5756
</manifest>

src/com/netease/qa/emmagee/utils/TrafficInfo.java

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
*/
1717
package com.netease.qa.emmagee.utils;
1818

19+
import java.io.IOException;
20+
import java.io.RandomAccessFile;
21+
1922
import android.net.TrafficStats;
2023
import android.util.Log;
2124

@@ -43,18 +46,52 @@ public TrafficInfo(String uid) {
4346
*/
4447
public long getTrafficInfo() {
4548
Log.i(LOG_TAG, "get traffic information");
49+
Log.d(LOG_TAG, "uid = " + uid);
50+
long traffic = trafficFromApi();
51+
return traffic <= 0 ? trafficFromFiles() : traffic;
52+
}
4653

47-
long rcvTraffic = UNSUPPORTED;
48-
long sndTraffic = UNSUPPORTED;
49-
50-
// Use getUidRxBytes and getUidTxBytes to get network traffic,these API
51-
// return both tcp and udp usage
54+
/**
55+
* Use TrafficStats getUidRxBytes and getUidTxBytes to get network
56+
* traffic,these API return both tcp and udp usage
57+
*
58+
* @return
59+
*/
60+
private long trafficFromApi() {
61+
long rcvTraffic = UNSUPPORTED, sndTraffic = UNSUPPORTED;
5262
rcvTraffic = TrafficStats.getUidRxBytes(Integer.parseInt(uid));
5363
sndTraffic = TrafficStats.getUidTxBytes(Integer.parseInt(uid));
64+
return rcvTraffic + sndTraffic < 0 ? UNSUPPORTED : rcvTraffic + sndTraffic;
65+
}
5466

55-
if (rcvTraffic == UNSUPPORTED || sndTraffic == UNSUPPORTED) {
56-
return UNSUPPORTED;
57-
} else
58-
return rcvTraffic + sndTraffic;
67+
/**
68+
* read files in uid_stat to get traffic info
69+
*
70+
* @return
71+
*/
72+
private long trafficFromFiles() {
73+
RandomAccessFile rafRcv = null, rafSnd = null;
74+
long rcvTraffic = UNSUPPORTED, sndTraffic = UNSUPPORTED;
75+
String rcvPath = "/proc/uid_stat/" + uid + "/tcp_rcv";
76+
String sndPath = "/proc/uid_stat/" + uid + "/tcp_snd";
77+
try {
78+
rafRcv = new RandomAccessFile(rcvPath, "r");
79+
rafSnd = new RandomAccessFile(sndPath, "r");
80+
rcvTraffic = Long.parseLong(rafRcv.readLine());
81+
sndTraffic = Long.parseLong(rafSnd.readLine());
82+
Log.d(LOG_TAG, String.format("rcvTraffic, sndTraffic = %s, %s", rcvTraffic, sndTraffic));
83+
} catch (Exception e) {
84+
}
85+
finally {
86+
try {
87+
if (rafRcv != null) {
88+
rafRcv.close();
89+
}
90+
if (rafSnd != null)
91+
rafSnd.close();
92+
} catch (IOException e) {}
93+
}
94+
return rcvTraffic + sndTraffic < 0 ? UNSUPPORTED : rcvTraffic + sndTraffic;
5995
}
96+
6097
}

0 commit comments

Comments
 (0)