——去年学了android两个月,今年由于项目再度拾起,过了个年真是基本忘光了,依旧菜鸟一个
——由于项目需要研究了一下流量监控,下面是对于android流量监控的一点心得体会
1. android实现流量监控在2.2版本之前没有专门的类和接口,我网上查看的大家的方法基本上都是读取一个文件/proc/net/dev,这个方法我没有使用,没有进行深入研究。
2. 我是用的是android2.2及之后版本有的流量监控类,TrafficStats,这个类里提供了以下几种方法,
static long getMobileRxBytes()//获取通过Mobile连接收到的字节总数,但不包含WiFi
static long getMobileRxPackets()//获取Mobile连接收到的数据包总数
static long getMobileTxBytes()//Mobile发送的总字节数
static long getMobileTxPackets()//Mobile发送的总数据包数
static long getTotalRxBytes()//获取总的接受字节数,包含Mobile和WiFi等
static long getTotalRxPackets()//总的接受数据包数,包含Mobile和WiFi等
static long getTotalTxBytes()//总的发送字节数,包含Mobile和WiFi等
static long getTotalTxPackets()//发送的总数据包数,包含Mobile和WiFi等
static long getUidRxBytes(int uid)//获取某个网络UID的接受字节数
static long getUidTxBytes(int uid) //获取某个网络UID的发送字节数
由于项目中需要用到监控各个应用的流量,我的思路是,获取手机中所有具有联网权限的应用,并且以列表形式显示出来,然后选择相应的应用,即可对其进行流量监控。
这里用到的便是getUidRxBytes(int uid)和getUidTxBytes(int uid)这两个方法。在我获取手机中所有具有联网权限的应用之前,我是把手机中所有应用的流量使用情况都显示了出来,我发现,连拨号器这种都有流量,最后我得出结论,这两个类方法获取的流量包括本地流量,所以就会出现连没有联网权限的应用都发送和接收字节数这种情况。
下面上一段我用于流量监控的代码。
-
publicvoiddingshi(){
-
-
mdb.openDB();
-
-
runnableapp=newRunnable(){
-
@Override
-
publicvoidrun(){
-
while(flag==0){
-
try{
-
Thread.sleep(1000);
-
}catch(InterruptedExceptione){
-
-
e.printStackTrace();
-
}
-
inti=0;
-
Log.v("app","id---->"+Thread.currentThread().getId());
-
try{
-
for(i=0;i<listuser.size();i++){
-
Log.v("app","开始"+Thread.currentThread().getId());
-
uid=Integer.parseInt(listuser.get(i));
-
appinfo=listappinfo.get(i);
-
-
Calendarcalendar=Calendar.getInstance();
-
intmonth=calendar.get(Calendar.MONTH)+1;
-
intday=calendar.get(Calendar.DAY_OF_MONTH);
-
inthour=calendar.get(Calendar.HOUR_OF_DAY);
-
intminute=calendar.get(Calendar.MINUTE);
-
intsecond=calendar.get(Calendar.SECOND);
-
floatmill=calendar.get(Calendar.MILLISECOND);
-
Stringtime=calendar.get(Calendar.YEAR)+"年"
-
+month+"月"
-
+day+"日"
-
+hour+"时"
-
+minute+"分"
-
+second+"秒"
-
+mill+"毫秒";
-
-
time02[i]=day*24*60*60+hour*60*60+minute*60+second+mill/1000;
-
-
System.out.println("现在的时间"+i+"--->"+time02[i]);
-
System.out.println("之前的时间"+i+"--->"+time01[i]);
-
-
recv[i]=TrafficStats.getUidRxBytes(uid);
-
if(recv[i]>0){
-
recv[i]=recv[i]/(1024*1024);
-
}else{
-
recv[i]=0;
-
}
-
tran[i]=TrafficStats.getUidTxBytes(uid);
-
if(tran[i]>0){
-
tran[i]=tran[i]/(1024*1024);
-
}
-
else{
-
tran[i]=0;
-
}
-
totalapp[i]=recv[i]+tran[i];
-
-
recvrate[i]=((recv[i]-recv01[i])*1024*1024)/(time02[i]-time01[i]);
-
tranrate[i]=((tran[i]-tran01[i])*1024*1024)/(time02[i]-time01[i]);
-
totalapprate[i]=((totalapp[i]-totalapp01[i])*1024*1024)/(time02[i]-time01[i]);
-
-
System.out.println(appinfo+i+"---->"+"接收速率---->"+recvrate[i]+"发送速率---->"+tranrate[i]+"total速率---->"+totalapprate[i]);
-
System.out.println("时间间隔"+i+"---->"+(time02[i]-time01[i]));
-
-
recv01[i]=recv[i];
-
tran01[i]=tran[i];
-
totalapp01[i]=totalapp[i];
-
time01[i]=time02[i];
-
-
-
System.out.println("uid="+uid+"---->"+"recv="+recv[i]);
-
System.out.println("uid="+uid+"---->"+"tran="+tran[i]);
-
System.out.println("uid="+uid+"---->"+totalapp[i]);
-
System.out.println("appinfo="+appinfo);
-
try{
-
mdb.addTrafficData(time,appinfo,String.valueOf(uid),String.valueOf(tran[i]),String.valueOf(recv[i]),String.valueOf(totalapp[i]),String.valueOf(tranrate[i]),String.valueOf(recvrate[i]),String.valueOf(totalapprate[i]));
-
}catch(Exceptione){
-
System.out.println("----->app出现异常");
-
}
-
Log.v("app","结束"+Thread.currentThread().getId());
-
}
-
}catch(Exceptione){
-
System.out.println("异常");
-
}
-
-
-
}
-
}
-
};
-
ThreadAppThread=newThread(runnableapp);
-
AppThread.start();
-
-
-
}
-
<spanstyle="font-size:18px;">——欢迎大家批评指正,共同探讨</span>

——心静自然凉,心静自然凉。。。
分享到:
相关推荐
通过深入研究和实践这些代码,不仅可以提升Android开发技能,还能帮助创建更加用户友好的应用,减少用户因数据超额产生的额外费用。所以,对于想要提升自己在Android流量监控方面能力的开发者来说,这是一个非常有...
在Android应用开发中,流量监控是一项重要的功能,它可以帮助用户管理他们的移动数据使用,避免超出套餐限制而产生额外费用。本文将深入探讨Android应用源码中的流量监控实现,以及如何利用`TrafficStats`类来获取和...
在Android平台上,流量监控是开发者和用户都非常关心的一个功能,特别是在移动数据有限的情况下。这个"android各种应用流量监控demo"提供了全面的解决方案,允许你跟踪并管理应用的网络使用情况,包括WiFi和移动数据...
综上所述,这个"android 流量监控源码"项目涵盖了Android开发中的多个核心知识点,包括网络API的使用、数据持久化、UI设计、多线程编程以及事件驱动的架构模式等。对于希望学习Android系统级编程、优化流量管理或...
**流量监控:** 1. **使用ConnectivityManager**:Android系统提供了ConnectivityManager服务,它负责管理网络连接,包括Wi-Fi和移动数据。通过调用`getActiveNetworkInfo()`方法,我们可以获取当前活动网络的状态,...
在Android平台上,流量监控是移动应用开发中的一个重要环节,它帮助用户了解并管理自己的网络数据使用情况。本文将深入探讨如何实现一个简单的Android流量监控代码,以及如何与应用程序交互,控制其流量消耗。 首先...
基于Android系统流量监控的安全软件设计与研究是当前信息技术发展的重要方向之一。随着Android系统的广泛应用,流量监控的安全软件设计变得越来越重要。该研究主要针对Android系统流量监控的安全软件设计与研究,...
在Android平台上,流量监控是一项重要的功能,它可以帮助用户跟踪应用程序的网络使用情况,避免意外的流量超额费用。本文将深入探讨如何实现一个直观且实用的Android流量监控功能。 首先,我们要理解Android系统...
总的来说,这个Android流量监控软件源码涵盖了Android网络编程、系统服务使用、UI设计、数据持久化以及后台服务等多个方面,是学习和实践Android开发的一个综合性项目。通过深入研究和理解,开发者不仅可以掌握网络...
本节将基于《Android应用开发深入学习实录》一书中的流量监控软件源码,详细探讨Android流量监控的实现原理和技术细节。 1. **流量统计基础** - **系统接口**:Android提供了一系列API,如`ConnectivityManager`和...
在Android平台上,开发一款流量监控悬浮窗以实时显示网速是一项实用的功能,它可以帮助用户随时了解设备的网络传输状态。本实例将详细讲解如何实现这一功能,并修复已知的bug。 首先,我们要创建一个悬浮窗服务...
在Android移动终端上,流量监控软件的设计与实现是至关重要的,因为随着智能手机的普及和移动数据网络的发展,用户对数据使用的关注度日益增加。同时,恶意软件通过联网可能会导致高额的数据费用,而Android系统本身...
Android 开发防火墙 网络拦截 开发 网络拦截防火墙
Android系统流量监控的安全软件开发设计分析.pdf
在Android系统中,控制和监控应用程序的网络流量是一项重要的任务,尤其对于那些需要优化数据使用的应用或者希望提供用户流量消耗报告的应用来说。...这对提升Android开发技能和优化应用性能具有很高的价值。
在Android开发过程中,系统资源的实时监控是至关重要的,它能帮助开发者理解应用程序的性能表现,定位并优化可能存在的问题。这款"Android系统资源实时监控工具"是一个轻量级的解决方案,专为开发者设计,提供了丰富...
本压缩包文件"手机流量监控.rar"可能包含一系列与开发手机流量监控应用相关的代码、文档或资源,虽然无法逐一验证其可用性,但可以作为学习和参考的材料。 首先,手机流量监控的核心技术包括: 1. **数据采集**:...
在Android应用开发中,了解应用的流量消耗情况对于优化用户体验和控制成本至关重要。"Android App流量统计源码"提供了一种方法来实现这一目标。这个源码项目专注于统计应用程序在WiFi和移动网络环境下消耗的数据流量...
【Android流量监控白名单策略】是针对Android平台上日益严重的安全问题,特别是恶意软件吸费现象,提出的一种流量监控改进方案。该策略的核心是在协议层建立白名单数据库,通过对应用程序进程的联网访问进行控制,以...