Android應(yīng)用源碼之流量監(jiān)控
源碼簡(jiǎn)介
在網(wǎng)上找到的一個(gè)小例子,可以統(tǒng)計(jì)每個(gè)應(yīng)用的網(wǎng)絡(luò)流量,區(qū)分移動(dòng)網(wǎng)絡(luò)與WIFI 技術(shù)點(diǎn): 使用TrafficStats記錄流量變化 使用Service,BroadcastReceiver監(jiān)控網(wǎng)絡(luò)狀態(tài)變化 使用sqlite記錄各個(gè)應(yīng)用已用流量數(shù)據(jù)(只能統(tǒng)計(jì)應(yīng)用安裝后使用的流量,之前用掉的不能統(tǒng)計(jì))。
源碼運(yùn)行截圖
代碼片段:
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- txtView = (TextView) findViewById(R.id.textView1);
- Intent intent = new Intent(MainActivity.this, TrafficService.class);
- bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
- dbManager = new DbManager(this);
- findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (trafficService == null) {
- txtView.setText("服務(wù)未綁定");
- } else {
- trafficService.logRecord();
- Map<string, trafficinfo=""> list = dbManager.queryTotal();
- StringBuilder sb = new StringBuilder();
- for (TrafficInfo info : list.values()) {
- sb.append(info.appName + " - 流量信息:\r\n");
- sb.append(
- "移動(dòng)網(wǎng)絡(luò)接收的流量"
- + Formatter.formatFileSize(
- MainActivity.this,
- info.mobileRx)).append("\r\n");
- sb.append(
- "移動(dòng)網(wǎng)絡(luò)發(fā)送的流量"
- + Formatter.formatFileSize(
- MainActivity.this,
- info.mobileTx)).append("\r\n");
- sb.append(
- "WIFI接收的流量"
- + Formatter.formatFileSize(
- MainActivity.this, info.wifiRx))
- .append("\r\n");
- sb.append(
- "WIFI發(fā)送的流量"
- + Formatter.formatFileSize(
- MainActivity.this, info.wifiTx))
- .append("\r\n");
- sb.append("--------------------").append("\r\n");
- txtView.setText(sb);
- }
- }
- }
- });
- }</string,>
源碼鏈接:http://down.51cto.com/900943