Note:纯属自己工作总结,好久没些博客了, 对自己这些年的工作做个记录 .

public class TrafficInfoActivity extends Activity {
//展示数据列表
private ListView lv;
//获取到所有具有Intenet权限的应用的流量信息
private TrafficInfoProvider provider;
//ProgressBar和TextView(正在加载...)的父控件,用于控制其显示
private LinearLayout ll_loading;
//封装单个具有Intenet权限的应用的流量信息
private List<TrafficInfo>  trafficInfos;
//处理子线程发送过来的消息,更新UI
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
ll_loading.setVisibility(View.INVISIBLE);
lv.setAdapter(new TrafficAdapter());
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.traffic_info);
super.onCreate(savedInstanceState);
lv = (ListView) findViewById(R.id.lv_traffic_manager);
provider = new TrafficInfoProvider(this);
ll_loading = (LinearLayout) findViewById(R.id.ll_loading);
ll_loading.setVisibility(View.VISIBLE);
//获取到具有Internet权限的应用所产生的流量
new Thread(){
public void run() {
trafficInfos = provider.getTrafficInfos();
//想主线程中发送一个空消息,用于通知主线程更新数据
handler.sendEmptyMessage(0);
};
}.start();
}
//数据适配器
private class TrafficAdapter extends BaseAdapter{

public int getCount() {
return trafficInfos.size();
}

public Object getItem(int position) {
return trafficInfos.get(position);
}

public long getItemId(int position) {
return position;
}
//ListView中显示多少个Item,该方法就被调用多少次
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder holder = new ViewHolder();
TrafficInfo info = trafficInfos.get(position);
//复用缓存的View
if(convertView==null){
view = View.inflate(getApplicationContext(), R.layout.traffic_item, null);
holder.iv_icon = (ImageView) view.findViewById(R.id.iv_traffic_icon);
holder.tv_name = (TextView) view.findViewById(R.id.tv_traffic_name);
holder.tv_rx = (TextView) view.findViewById(R.id.tv_traffic_rx);
holder.tv_tx = (TextView) view.findViewById(R.id.tv_traffic_tx);
holder.tv_total = (TextView) view.findViewById(R.id.tv_traffic_total);
view.setTag(holder);
}else{
view = convertView;
holder = (ViewHolder) view.getTag();
}
holder.iv_icon.setImageDrawable(info.getIcon());
holder.tv_name.setText(info.getAppname());
//下载所产生的流量
long rx = info.getRx();
//上传所产生的流量
long tx = info.getTx();
//增强程序的健壮性。因为在模拟器上运行时返回值为-1.
if(rx<0){
rx = 0;
}
if(tx<0){
tx = 0;
}
holder.tv_rx.setText(Formatter.formatFileSize(getApplicationContext(), rx));
holder.tv_tx.setText(Formatter.formatFileSize(getApplicationContext(), tx));
//总流量
long total = rx + tx;
//通过Formatter将long类型的数据转换为MB或这KB,当数字较小时,自动采用KB
holder.tv_total.setText(Formatter.formatFileSize(getApplicationContext(), total));
return view;
}
}
//通过static的修饰,保证了栈内存中存在唯一一份字节码且被共用
static class ViewHolder{
ImageView iv_icon;
TextView tv_name;
TextView tv_tx;
TextView tv_rx;
TextView tv_total;
}
}

Android获取流量信息相关推荐

  1. I.MX6 android 获取framebuffer信息

    /********************************************************************************* I.MX6 android 获取f ...

  2. android获取电池信息;android获取电池容量、技术、电压、电量、温度等信息

    android获取电池信息:android获取电池容量.技术.电压.电量.温度等信息 1.这里我仅展示工具类,需要注意的是这里的部分值要刷新后才能显示,添加刷新UI的方法即可,而且电量温度等都是变化的 ...

  3. android获取GPU信息;android获取GPU渲染器、供应商、版本和扩展名等信息

    android获取GPU信息:android获取GPU渲染器.供应商.版本和扩展名等信息 效果: 1.布局文件 <?xml version="1.0" encoding=&q ...

  4. Android获取通讯录信息

    Android获取通讯录信息 欢迎关注本人网站:rytter的私人博客网站 权限申请 自Android6.0以后,Android权限申请全部要求为动态申请(注:通讯录权限为危险权限),权限申请方法如下 ...

  5. android 获取当前坐标,Android获取位置信息的方法

    本文实例为大家分享了Android获取位置信息的具体代码,供大家参考,具体内容如下 1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务 ...

  6. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  7. Android 获取ROM信息

    Android 获取rom信息没有统一的接口,需要事先知道配置文件中的对应的值 1.打开cmd窗口 2.输入adb shell 再输入getprop命令 3.得到配置信息 查找关于rom信息对应的键, ...

  8. android异常信息,Android 获取设备信息 异常

    /**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ ...

  9. android 获取手机信息工具类

    package com.yqy.yqy_listviewheadview;import android.content.Context; import android.telephony.Teleph ...

最新文章

  1. H.265视频编码与技术全析(下)
  2. Java界面命名_java中用setTitel和JFrame给窗体命名的区别
  3. nagios监控安装
  4. python哪一版好用-最好的Python入门教材是哪本?
  5. asyncio并发数_Python Futures并发编程详解
  6. 程序安装后依然是老版主页的修改办法
  7. hdu5347 MZL's chemistry(打表)
  8. 关于员工技术及培训所想
  9. OrderOnline——功能需求
  10. Ubuntu 6.10 发布
  11. LoRaWAN协议格式
  12. 【网络工程师必备】怎么使用route命令实现内外网切换
  13. SONY 系列手机 Android 5.1 系统 Root 方法
  14. cuda驱动更新方法之一:
  15. Java 前后端分离部署方式
  16. 教你在Windows自带的微软拼音输入法中用上小鹤双拼方案
  17. 多个无线 AP 怎么实现无缝漫游?
  18. foobox 2.11(foobar2000 CUI配置)
  19. 【7】PR音频及结合AU去除噪音【8】PR字幕运用
  20. python中label组件参数_Tkinter:Label组件

热门文章

  1. 2021最新Python自动化软件测试笔试题(含答案)
  2. 2015光伏行业最全数据解析2016展望
  3. 地图导航APP开发作用
  4. cesium中添加建筑白模
  5. 我家有台智能模仿太阳光灯—“Ario”智能落地台灯
  6. LeetCode 145:二叉树的后序遍历
  7. 2018年度中国存储市场影响力排行榜”榜单揭晓
  8. Vbox无法打开虚拟机“不能为虚拟电脑****打开一个新任务”
  9. 操作系统:用C语言实现FCFS(先来先服务),SJF(短作业抢占)和RR(时间片轮转,时间片=1)
  10. 11种离散型变量编码方式及效果对比