鱼C论坛

 找回密码
 立即注册
查看: 2223|回复: 1

小白马卫士项目总结之流量统计

[复制链接]
发表于 2015-1-6 13:08:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 青玄 于 2015-1-6 13:25 编辑

流量统计模块

核心代码:

  1. <p>int uid=info.applicationInfo.uid;
  2. long trafficRx=TrafficStats.getUidRxBytes(uid);  //uid进程的总的接收量
  3.   long  trafficTx=TrafficStats.long totalTrx=TrafficStats.getTotalRxBytes();   //手机上的总的流量包括手机流量与wifi流量
  4.   long totalTtx=TrafficStats.getTotalTxBytes();
  5.   
  6.   long mobileRx=TrafficStats.getMobileRxBytes();  //手机上网的流</p><p> </p><p>量
  7.   long mobileTx=TrafficStats.getMobileTxBytes();getUidTxBytes(uid);  //uid进程的总的发送量</p><p>*********************************************************************************</p><p> </p><p> </p><p>全部的代码:</p><p> </p><p>package cn.cbd.mobilesafe.activity.engine;</p><p>import java.util.ArrayList;
  8. import java.util.List;</p><p>import cn.cbd.mobilesafe.activity.bean.ProcessTraffic;</p><p>import android.app.ActivityManager;
  9. import android.content.Context;
  10. import android.content.pm.PackageInfo;
  11. import android.content.pm.PackageManager;
  12. import android.content.pm.PermissionInfo;
  13. import android.net.TrafficStats;
  14. import android.util.Log;</p><p>public class TrafficProvider {

  15. public static List<ProcessTraffic> getProcessTraffics(Context context)
  16. {
  17.   List<ProcessTraffic> processTraffics=new ArrayList<ProcessTraffic>();
  18.   PackageManager packageManager=context.getPackageManager();
  19.   List<PackageInfo> packageInfos=packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
  20.   for(PackageInfo info :packageInfos)
  21.   {
  22.    
  23.    String[] permissionInfos=info.requestedPermissions;
  24.    
  25.    if(permissionInfos!=null && permissionInfos.length>0)
  26.    {
  27.     Log.i("TrafficProvider", info.packageName+" "+permissionInfos.length);
  28.     for(String pInfo : permissionInfos)
  29.     {
  30.        if("android.permission.INTERNET".equals(pInfo))
  31.        {
  32.         ProcessTraffic processTraffic=new ProcessTraffic();
  33.         processTraffic.setIcon(info.applicationInfo.loadIcon(packageManager));
  34.         processTraffic.setName(info.applicationInfo.loadLabel(packageManager).toString());
  35.         processTraffic.setPackageName(info.packageName);
  36.         
  37.         int uid=info.applicationInfo.uid;
  38.         long trafficRx=TrafficStats.getUidRxBytes(uid);
  39.         long trafficTx=TrafficStats.getUidTxBytes(uid);
  40.         processTraffic.setTrafficRx(trafficRx);
  41.         processTraffic.setTrafficTx(trafficTx);
  42.         processTraffics.add(processTraffic);
  43.         break;
  44.         
  45.        }
  46.     }
  47.    }
  48.    
  49.    
  50.   }
  51.   return processTraffics;
  52. }</p><p>}
  53. ******************************************************************************</p><p> </p><p>主程序模块的代码:</p><p> </p><p>package cn.cbd.mobilesafe.activity;</p><p>import java.util.List;</p><p>import android.app.Activity;
  54. import android.graphics.drawable.Drawable;
  55. import android.net.TrafficStats;
  56. import android.os.AsyncTask;
  57. import android.os.Bundle;
  58. import android.text.format.Formatter;
  59. import android.util.Log;
  60. import android.view.View;
  61. import android.view.ViewGroup;
  62. import android.widget.BaseAdapter;
  63. import android.widget.ImageView;
  64. import android.widget.LinearLayout;
  65. import android.widget.ListView;
  66. import android.widget.RelativeLayout;
  67. import android.widget.TextView;
  68. import cn.cbd.mobilesafe.activity.bean.ProcessTraffic;
  69. import cn.cbd.mobilesafe.activity.engine.TrafficProvider;</p><p>public class TrafficManagerActivity extends Activity {

  70. private TextView tv_2g_3g_traffic;
  71. private TextView tv_wifi_traffic;
  72. private ListView content;
  73. private ListView lv_traffic_manager;
  74. private LinearLayout ll_traffic_loading;
  75. /**
  76.   * ProcessTraffic:
  77.   * private Drawable icon;
  78.   private String name;
  79.   private String packageName;
  80.   private long trafficRx;
  81.   private long trafficTx;
  82.   */
  83. private List<ProcessTraffic> processTraffics;
  84. private MyTrafficAdapter myTrafficAdapter;
  85. @Override
  86. protected void onCreate(Bundle savedInstanceState) {
  87.   
  88.   super.onCreate(savedInstanceState);
  89.   setContentView(R.layout.activity_traffic_manager);
  90.   
  91.   tv_2g_3g_traffic=(TextView) findViewById(R.id.tv_2g_3g_traffic);
  92.   tv_wifi_traffic=(TextView) findViewById(R.id.tv_wifi_traffic);
  93.   content=(ListView) findViewById(R.id.content);
  94.   lv_traffic_manager=(ListView) findViewById(R.id.lv_traffic_manager);
  95.   
  96.   ll_traffic_loading=(LinearLayout) findViewById(R.id.ll_traffic_loading);
  97.   
  98.   long totalTrx=TrafficStats.getTotalRxBytes();   //手机上的总的流量包括手机流量与wifi流量
  99.   long totalTtx=TrafficStats.getTotalTxBytes();
  100.   
  101.   long mobileRx=TrafficStats.getMobileRxBytes();  //手机上网的流量
  102.   long mobileTx=TrafficStats.getMobileTxBytes();
  103.   
  104.   tv_2g_3g_traffic.setText("2G/3G总流量:"+Formatter.formatFileSize(this, mobileRx+mobileTx));
  105.   tv_wifi_traffic.setText("wifi总流量:"+Formatter.formatFileSize(this, totalTrx+totalTtx-mobileRx-mobileTx));
  106.   Log.i("bbb","123");
  107.   showData();
  108.   
  109. }

  110. public void showData()
  111. {
  112.   new AsyncTask<Void, Void, Void>(){</p><p>   
  113.    @Override
  114.    protected void onPreExecute() {
  115.     ll_traffic_loading.setVisibility(View.VISIBLE);
  116.     super.onPreExecute();
  117.    }</p><p>   </p><p>   @Override
  118.    protected Void doInBackground(Void... params) {
  119.     processTraffics=TrafficProvider.getProcessTraffics(getApplicationContext());
  120.     Log.i("bbb",processTraffics.size()+"");
  121.     return null;
  122.    }
  123.    
  124.    @Override
  125.    protected void onPostExecute(Void result) {
  126.     ll_traffic_loading.setVisibility(View.INVISIBLE);
  127.     myTrafficAdapter=new MyTrafficAdapter();
  128.     lv_traffic_manager.setAdapter(myTrafficAdapter);
  129.     super.onPostExecute(result);
  130.    }</p><p>   
  131.    
  132.   }.execute();
  133. }

  134. private class MyTrafficAdapter extends BaseAdapter
  135. {</p><p>  @Override
  136.   public int getCount() {
  137.    
  138.    return processTraffics.size();
  139.   }</p><p>  @Override
  140.   public Object getItem(int position) {
  141.    
  142.    return processTraffics.get(position);
  143.   }</p><p>  @Override
  144.   public long getItemId(int position) {
  145.    
  146.    return position;
  147.   }</p><p>  @Override
  148.   public View getView(int position, View convertView, ViewGroup parent) {
  149.    View view;
  150.    ViewHolder holder;
  151.    if(convertView!=null && convertView instanceof RelativeLayout)
  152.    {
  153.     view=convertView;
  154.     holder=(ViewHolder) view.getTag();
  155.    }
  156.    else
  157.    {
  158.        Log.i("aaa", processTraffics.size()+"");
  159.     view =View.inflate(getApplicationContext(), R.layout.layout_traffic_item, null);
  160.     holder=new ViewHolder();
  161.     holder.iv_icon=(ImageView) view.findViewById(R.id.iv_traffic_icon);
  162.     holder.tv_name=(TextView) view.findViewById(R.id.tv_traffic_name);
  163.     holder.tv_tx=(TextView) view.findViewById(R.id.tv_traffic_tx);
  164.     holder.tv_rx=(TextView) view.findViewById(R.id.tv_traffic_rx);
  165.     holder.tv_total=(TextView) view.findViewById(R.id.tv_traffic_total);
  166.     view.setTag(holder);
  167.    }
  168.    holder.iv_icon.setImageDrawable(processTraffics.get(position).getIcon());
  169.    holder.tv_name.setText(processTraffics.get(position).getName());
  170.    long tx=processTraffics.get(position).getTrafficTx();
  171.    long rx=processTraffics.get(position).getTrafficRx();
  172.    long total=tx+rx;
  173.    if(tx<0)
  174.    {
  175.     tx=0;
  176.    }
  177.    if(rx<0)
  178.    {
  179.     rx=0;
  180.    }
  181.    if(total<0);
  182.    {
  183.     total=0;
  184.    }
  185.    holder.tv_tx.setText("上传:"+Formatter.formatFileSize(getApplicationContext(), tx));
  186.    holder.tv_rx.setText("下载:"+Formatter.formatFileSize(getApplicationContext(), rx));
  187.    holder.tv_total.setText("总计:"+Formatter.formatFileSize(getApplicationContext(), total));
  188.    return view;
  189.   }
  190.   
  191. }</p><p> static class ViewHolder
  192. {
  193.   private ImageView iv_icon;
  194.   private TextView tv_name;
  195.   private TextView tv_tx;
  196.   private TextView tv_rx;
  197.   private TextView tv_total;
  198. }
  199. </p><p>}
  200. </font></font></font></b></p>
复制代码

QQ截图20150106125636.jpg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-6 13:28:53 | 显示全部楼层
补充一下! 在贴代码的时候,不知道怎么的! 代码分开贴的话,就贴在一起了,不知道怎么回事儿! 所以只好把核心代码与整个模块的代码贴在一起了! 而且里面还出现了一些莫名其妙的xml标签! 难道是论坛出现bug了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 10:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表