android统计流量,Android 获取手机整体流量使用情况以及某个应用的流量的统计
很多安全卫士类软件都实现了网速监测功能,也算是一个比较实用的功能。Android下,TrafficStats类实现了对流量的统计。
/proc/uid_stat/uid/tcp_send 上传流量
/proc/uid_stat/uid/tcp_rcv 下载流量
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(intuid) //获取某个网络UID的发送字节数
获取某个应用的流量的统计(根据包名)
一、根据包名获取相应的UID;
/**
* 获取当前应用uid
* @return
*/
public int getUid() {
try {
PackageManager pm = mContext.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);
return ai.uid;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return -1;
}
二、根据UID获取相应的流量的统计
TrafficInfo tr=new TrafficInfo(getApplicationContext());
int uid=tr.getUid();
Log.e("asdf",uid+"");
Log.e("asdf",tr.getRcvTraffic()+"--"+tr.getSndTraffic()+"-----"+tr.getTrafficInfo());
关键的类:
package com.rzt.qualitytest.utils;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.math.BigDecimal;
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.TrafficStats;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
/**
* 应用的流量信息
*/
public class TrafficInfo {
private static final int UNSUPPORTED = -1;
private static final String LOG_TAG = "test";
private static TrafficInfo instance;
static int uid=0;
private long preRxBytes = 0;
private Timer mTimer = null;
/** 更新频率(每几秒更新一次,至少1秒) */
private final int UPDATE_FREQUENCY = 1;
private int times = 1;
private Context mContext;
public TrafficInfo(Context mContext, int uid) {
this.uid = uid;
this.mContext=mContext;
}
public TrafficInfo(Context mContext) {
this.mContext=mContext;
}
/**
* 获取总流量
*
* @return
*/
public long getTrafficInfo() {
long rcvTraffic = UNSUPPORTED; // 下载流量
long sndTraffic = UNSUPPORTED; // 上传流量
rcvTraffic = getRcvTraffic();
sndTraffic = getSndTraffic();
if (rcvTraffic == UNSUPPORTED || sndTraffic == UNSUPPORTED)
return UNSUPPORTED;
else
return rcvTraffic + sndTraffic;
}
/**
* 获取下载流量 某个应用的网络流量数据保存在系统的/proc/uid_stat/$UID/tcp_rcv | tcp_snd文件中
*
* @return
*/
public long getRcvTraffic() {
long rcvTraffic = UNSUPPORTED; // 下载流量
if(uid==0){
uid=getUid();
}
rcvTraffic = TrafficStats.getUidRxBytes(uid);
if (rcvTraffic == UNSUPPORTED) { // 不支持的查询
return UNSUPPORTED;
}
Log.i("test", rcvTraffic + "--1");
RandomAccessFile rafRcv = null, rafSnd = null; // 用于访问数据记录文件
String rcvPath = "/proc/uid_stat/" + uid + "/tcp_rcv";
try {
rafRcv = new RandomAccessFile(rcvPath, "r");
rcvTraffic = Long.parseLong(rafRcv.readLine()); // 读取流量统计
} catch (FileNotFoundException e) {
Log.e(LOG_TAG, "FileNotFoundException: " + e.getMessage());
rcvTraffic = UNSUPPORTED;
} catch (IOException e) {
Log.e(LOG_TAG, "IOException: " + e.getMessage());
e.printStackTrace();
} finally {
try {
if (rafRcv != null)
rafRcv.close();
if (rafSnd != null)
rafSnd.close();
} catch (IOException e) {
Log.w(LOG_TAG, "Close RandomAccessFile exception: " + e.getMessage());
}
}
Log.i("test", rcvTraffic + "--2");
return rcvTraffic;
}
/**
* 获取上传流量
*
* @return
*/
public long getSndTraffic() {
long sndTraffic = UNSUPPORTED; // 上传流量
if(uid==0){
uid=getUid();
}
sndTraffic = TrafficStats.getUidTxBytes(uid);
if (sndTraffic == UNSUPPORTED) { // 不支持的查询
return UNSUPPORTED;
}
RandomAccessFile rafRcv = null, rafSnd = null; // 用于访问数据记录文件
String sndPath = "/proc/uid_stat/" + uid + "/tcp_snd";
try {
rafSnd = new RandomAccessFile(sndPath, "r");
sndTraffic = Long.parseLong(rafSnd.readLine());
} catch (FileNotFoundException e) {
Log.e(LOG_TAG, "FileNotFoundException: " + e.getMessage());
sndTraffic = UNSUPPORTED;
} catch (IOException e) {
Log.e(LOG_TAG, "IOException: " + e.getMessage());
e.printStackTrace();
} finally {
try {
if (rafRcv != null)
rafRcv.close();
if (rafSnd != null)
rafSnd.close();
} catch (IOException e) {
Log.w(LOG_TAG, "Close RandomAccessFile exception: " + e.getMessage());
}
}
return sndTraffic;
}
/**
* 获取当前下载流量总和
*
* @return
*/
public static long getNetworkRxBytes() {
return TrafficStats.getTotalRxBytes();
}
/**
* 获取当前上传流量总和
*
* @return
*/
public static long getNetworkTxBytes() {
return TrafficStats.getTotalTxBytes();
}
/**
* 获取当前网速
*
* @return
*/
public double getNetSpeed() {
long curRxBytes = getNetworkRxBytes();
if (preRxBytes == 0)
preRxBytes = curRxBytes;
long bytes = curRxBytes - preRxBytes;
preRxBytes = curRxBytes;
//int kb = (int) Math.floor(bytes / 1024 + 0.5);
double kb = (double)bytes / (double)1024;
BigDecimal bd = new BigDecimal(kb);
return bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public void stopCalculateNetSpeed() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
}
/**
* 获取当前应用uid
* @return
*/
public int getUid() {
try {
PackageManager pm = mContext.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);
return ai.uid;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return -1;
}
/**
* 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的发送字节数
*/
}转载:http://blog.csdn.net/yyh352091626/article/details/50599621
android统计流量,Android 获取手机整体流量使用情况以及某个应用的流量的统计相关推荐
- Android Studio使用Mob获取手机验证码
最近,在做毕设,对于我这个android小白来说,真的是很头大啊,好多东西都不会... 无奈,边学边做呗,都是自己作的啊!其中有一个模块是通过手机获取验证码进行登录,开始用的是Mob的后台获取验证码实 ...
- android 使用内容提供者获取手机联系人
最近在学习安卓的相关内容, 正好在写获取手机联系人的程序, 就想到了内容提供者, 这里有几点需要注意, 写到这里, 以后方便自己查询. 1. 手机联系人的数据库是存储在 data/data/com.a ...
- Android截图apk,PC获取手机截图、复制文件、安装APK
PC获取手机截图.复制文件.安装APK 我在eoe上的帖子的链接 PC获取手机截图.复制文件.安装APK http://www.eoeandroid.com/thread-324986-1-1.htm ...
- Android之通过ContentResolver获取手机图片和视频的路径和生成缩略图和缩略图路径
1 问题 获取手机所有图片和视频的路径和生成图片和视频的缩略图和缩略图路径 生成缩略图我们用的系统函数 public static Bitmap getThumbnail(ContentResolve ...
- android pak文件_Android 获取手机中已安装apk文件信息
通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManager(); ...
- android l 百度输入法,百度手机输入法Android5.1版—离线语音更省流量
近日,百度手机输入法发布了全新安卓5.1版,主打离线语音.粤语语音.智能英文.英文单词手写.全新皮肤等功能,获得了不少用户的好评.据了解,百度手机输入法安卓5.1版在原5.0版简约风格的基础上更加专注 ...
- android root工具twrp,安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.
安装adb工具 从以上地址下载,然后解压到任意目录(例如C:\adb). 将此目录添加到windows环境变量path中. 在cmd中输入adb, fastboot等命令,如果"显示&quo ...
- android获取手机流量使用情况
软件流量使用数据保存在 /proc/uid_stat/uid(用户id)/ 下面文件中 /proc/uid_stat/uid/tcp_send 上传流量 /proc/uid_stat/u ...
- android 系统应用流量,android获取手机流量使用情况
软件流量使用数据保存在/proc/uid_stat/uid(用户id)/ 下面文件中 /proc/uid_stat/uid/tcp_send 上传流量 /proc/uid_stat/ui ...
最新文章
- java高效代码_Java工程师该如何编写高效代码?
- python读文件代码-简单了解Python读取大文件代码实例
- php常用函数time
- Kong Api 初体验、Kong安装教程
- 2020 年,你必须知道发展最快和衰落最快的软件技能
- cogs2514 艺术
- 3. 无线体内纳米网:图文概述
- matlab 矩阵列运算,MATLAB矩阵及其运算
- 鹏保宝 v7.1.0 官方版
- 国产linux系统优麒麟下载,优麒麟 20.04 LTS Beta 版本发布下载
- HBuilder表单提交php出现内部服务器错误
- 【JY】如何利用python来编写GUI?
- 面试官问:浏览器输入 URL 回车之后发生了什么?
- PyTorch学习笔记(19) ——NIPS2019 PyTorch: An Imperative Style, High-Performance Deep Learning Library
- 虎门大桥抖动,千亿级的物联网市场被打开
- 基于android的宠物领养系统
- Android异步加载图像(含线程池,缓存方法)
- webmail lite php,WebMail Lite - 从Gmail,Yahoo,Outlook和其他管理和下载邮件
- 聊聊win 7回收站 回收站技巧大公开【xitongshoucang.com】
- java 接口校验接收参数_java接口参数校验