1.大家都知道android在2.2版本中提供了trafficstats介面對流量的統計,它提供了一系列的native方法相應統計分類 ,對應的方法如下:
static longgetmobilerxbytes()//獲取通過mobile連線收到的位元組總數,不包含wifi
static longgetmobilerxpackets()//獲取mobile連線收到的資料報總數,不包含wifi
static longgetmobiletxbytes()//mobile傳送的總位元組數
static longgetmobiletxpackets()//mobile傳送的總資料報數
static longgettotalrxbytes()//獲取總的接受位元組數,包含mobile和wifi等
static longgettotalrxpackets()//總的接受資料報數,包含mobile和wifi等
static longgettotaltxbytes()//總的傳送位元組數,包含mobile和wifi等
static longgettotaltxpackets()//傳送的總資料報數,包含mobile和wifi等
static longgetuidrxbytes(int uid)//獲取某個網路uid的接受位元組數
static longgetuidtxbytes(int uid) //獲取某個網路uid的傳送位元組數
2. 但在1.6,2.1呢。。。可以通過對檔案的的讀取而取得資料流量的資料,所以我猜想trafficsta應該也通過讀檔案的方式來取的流量吧。好了不多說了,**:
public class trafficservice extends service ;
string gprsdata = ;
string wifidata = ;
string data = "0,0,0,0,0,0,0,0,0,0,0,0";// 對應on.txt裡面的格式
final string ethline = " eth0";// eth是乙太網資訊 tiwlan0 是 wifi rmnet0 是 gprs
final string gprsline = "rmnet0";
final string wifiline = "tiwlan0";
final string text_encoding = "utf-8";
final public string onpath = "/data/data/com.example.hello/on.txt";
final public string logpath = "/data/data/zy.dnh/log.txt";
private runnable mtasks = new runnable()
}; @override
public void onstart(intent intent, int startid)
@override
public void oncreate()
@override
public ibinder onbind(intent intent)
@override
public void ondestroy()
//讀裝置流量
public void readdev() catch (filenotfoundexception e)
bufferedreader in = new bufferedreader(fstream, 500);
string line;
string segs;
string netdata = null;
int count = 0;
int k;
int j;
try
}} else if (line.startswith(gprsline))
}} else if (line.startswith(wifiline)) }}
count++;
}fstream.close();
} catch (ioexception e)
} public string getinfo(string path)
in = new fileinputstream(file);
// 將檔案內容全部讀入到byte陣列
int length = (int) file.length();
byte temp = new byte[length];
in.read(temp, 0, length);
// 將byte陣列用utf-8編碼並存入display字串中
str = encodingutils.getstring(temp, text_encoding);
// 關閉檔案file的inputstream
in.close();
} catch (ioexception e)
return str;
} public void writefile(string str, string path) catch (ioexception e)
} public void refresh()
// 計算增量
else
// 讀取log.txt
// 獲取當前時間
final calendar c = calendar.getinstance();
myear = c.get(calendar.year); // 獲取當前年份
mmonth = c.get(calendar.month) + 1;// 獲取當前月份
mday = c.get(calendar.day_of_month);// 獲取當前月份的日期號碼
mhour = c.get(calendar.hour_of_day);// 獲取當前的小時數
mminute = c.get(calendar.minute);// 獲取當前的分鐘數
mdate = myear + "-" + mmonth + "-" + mday;
string logstr = getinfo(logpath);// 將log.txt的內容讀到text字串中
string line = logstr.split("/n");
log.i("sys", "logstr: " + logstr);
string today = line[line.length - 1];// 獲得今日已記錄流量
string betoday = today.split(",");
// 檢查檔案最後一行是否為今天的流量記錄資訊
if (!betoday[0].equals(mdate))// 如果檔案只有一行,表明目前日誌為空,將當前日期加入
// 判斷今日流量是否已經記錄,如果今日流量沒有記錄
int i;
// 處理今日流量
int newtodaydata = new int[12];// 表示今日流量
string newtoday = mdate;
for (i = 0; i <= 11; i++)
newtoday = newtoday + "/n";
string betotal = line[0].split(",");
int newtotaldata = new int[12];// 表示總流量數值
// 更新第一行
string newtotal = "total";
for (i = 0; i <= 11; i++)
newtotal = newtotal + "/n";
// 處理中間不變的部分
string before = "";// before為之前的從第1行到昨天的流量記錄
for (i = 1; i <= line.length - 2; i++)
before = before + line[i] + "/n";// 代表中間不變的部分
string newlog = newtotal + before + newtoday;
log.i("sys", newlog);
for (int k = 0; k < delta.length; k++)
writefile(data, onpath);// 更新流量記錄
writefile(newlog, logpath);// 更新log*/
}}
Android2 1遊戲開發 雙緩衝技術的應用
android2.1遊戲開發 雙緩衝技術的應用 這幾天做乙個遊戲的開發,發現經常概率性的出現空指標異常,特別在開發板上,更容易出現錯誤 跟蹤 發現,在 canvas.drawbitmap key bitmap,keyx,keyy,paint 中會出現讀取失敗而導致丟擲空指標異常。經過反覆除錯,在使用...
Android2 1下除錯3G模組(一)
曾幾何時在android2.1下除錯3g模組,曾幾何時模組廠商提供的庫不能用,曾幾何時只能用自己的庫痛苦地除錯.這一切的一切都已成往事,昔日的成功在毫無保留下成為浮雲,該忘了忘記了,該記得也跟著忘記了。現如今再次調3g模組,卻不知道以前如何除錯,看來還是要記下來。我採用的是華為em770w模組,支援...
Android2 1下除錯3G模組(二
前面講到了如何讓修改kernel驅動和ril層 接下來還需要增加ppp撥號以及裝置檔案和服務屬性。1.修改init.gprs pppd屬性 對應檔案 system core include private android filesystem config.h 在static struct fs p...