陈进川 广东省粤东技师学院
Android平台手机流量监测技术研究
陈进川 广东省粤东技师学院
4G技术的发展及Android手机的普及,智能手机给消费者带来乐趣的同时,也使得消费者手机上网流量激增,再加上居高不下的流量费用,上网产生的流量更加成为一个倍受争议的话题。本文研究了一种动态跟踪流量使用的技术。实时刷新各软件的流量数据并告知用户,进而达到流量使用监测的目的,最终以手机应用软件的形式将其实现出来。
Android 手机流量 监测
随着智能手机的飞速发展,手机的功能越来越强大。如今的智能手机操作系统主要有两大阵营:Android(即安卓)和苹果的IOS,其中,安卓的市场份额更是超过了80%,然而,手机病毒也成为了继电脑病毒后的另一个令人烦恼的话题。目前手机病毒的破坏性主要有五大方面:远程控制、恶意扣费、恶意传播、隐私窃取和资费消耗。而令用户大感头疼的恶意扣费软件。可以在使用者不知情的情况下连接网络,偷偷发送数据或者下载恶意软件,从而使用户在不知不觉中产生大量的数据流量,产生高额的流量费用。因此,在安卓系统上对每一个软件的流量使用情况进行分析就显得尤为重要。
目前市面上虽然已经有了各种流量监测软件,但这些软件往往夹带着各种广告,有些甚至含有病毒,并且也不能随心所欲地进行提醒设置,为了解决上述问题,也为了研究安卓手机的流量运作机理,为教学授课提供技术基础,我开发了以下的小工具对安卓手机的数据流量进行监测,工具主要包括了流量获取和流量刷新两大模块。
2.1 流量获取模块的实现方法
本模块的实现需要解决两个问题:一是如何获知手机中拥有上网权限的应用程序列表,二是如何逐一地获知这些程序的流量情况。
首先应先获取拥有网络访问权限的程序列表,以便下一步根据列表来查询其流量情况。该步骤实现起来不难,可由以下代码来判断:
接下来可以根据这些UID对其流量情况进行查询。安卓系统对软件的流量数据都是存放在目录/proc/uid_stat/uid下的,而要获取其流量情况,可以使用系统提供的一个类:TrafficStats,通过直接调用可以获取相应的流量数据,可通过该类里的方法getUidRxBytes直接获得。
2.2 数据刷新模块的实现方法
在获知了应用软件的流量数据后,需要进一步获知其流量速度,一个简单的方法就是将当前获得的应用软件流量数据减去前一时刻获得的应用软件流量数据,得到前后两个时刻的流量差值,再将这个差值除以两个时刻的时间间隔,即可获得其流量速度。
实现起来需要解决2个问题:
①如何对各个应用软件的流量数据进行存取;
②如何每隔一定时间自动刷新流量数据。
对各软件的数据流量进行存取,可以采用HashMap(哈希图)的形式。
上述代码中,getAPPwlll是一个自定义类,将流量获取模块封装进去,用于执行流量数据获取操作,方便后续调用。新创建的对象run在使用的时候应重写run方法,并在其中添加需要定时执行的内容。
获知流量速度,需要用当前时刻的流量数据减去前一时刻的流量数据再除以时间间隔,软件一开启时,则采用后一时刻的数据减去当前时刻的数据的方式来获取软件的流量速度数据。因此,须先获得当前流量数据,再使用线程来自动每隔一定时间刷新数据。
为了检验本流量监测工具的实际性能,需从本工具的功能方面对其进行测试和评估。正常使用时测试结果如下。
从图中可以看出,正常使用时,对于超出设定提醒值5KB时,本流量监测工具正常工作,能弹出框及时地提醒用户。
随着网络流量越来越引起人们重视,为了防止流氓软件的恶意消耗流量,对手机应用软件流量的实时监控就显得尤为重要。本文以安卓平台的数据流量为例,阐述了实时监测手机中软件流量使用情况的方法。然而本流量监测软件也存在着一些不足,如界面未做过多修饰,这也是下一步工作的展望。
[1]刘淼.Android流量监控技术研究与实现.硕士论文.华中科技大学
[2]李俊.Android平台下基干流量监测的安全软件设计与实现.硕士论文.西南交通大学