统计android设备的网络数据使用量

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

两种途径

使用到的类

TrafficStats设备启动以来流量的统计信息
NetworkStatsManager网络历史数据

1、TrafficStats类

是读取Linux提供的文件对象系统类型的文本进行解析。
android.net.TrafficStats类中提供了多种静态方法可以直接调用获取返回类型均为 long如果返回等于-1代表 UNSUPPORTED 当前设备不支持统计。

TrafficStats能够获取设备的数据流量和总的网络流量消耗一般情况下也就得到Wi-Fi下的流量信息
可以查询uid对应的流量信息而uid可以通过应用的包名查询到因此能够查询某个应用的流量统计信息不考虑shareuid。
非常方便的是它的使用不需要特别的权限。另一方面它也一些限制

1无法获取应用的数据流量消耗
从文档中仅能获取到指定uid的流量但无法区分不同网络类型下的消耗
间接方法是通过监听网络切换做好流量记录但是要保证你的应用一直存活且一定准确接收到网络切换信息基本不可用。
2无法获取某个时间段内的流量消耗
从API文档中看函数参数没有与时间相关的信息。而且重要的一点是TrafficStats类中记录的是设备重启以来的流量统计信息。因为TrafficStats 类底层是读取/proc/net/xt_qtaguid/stats 对内容进行解析将得到的结果返回上层。

Android系统中封装了一套流量数据API这些API可以很好的管理Android系统流量使用情况。我们可以基于这些Android API来实现管理手机流量的功能。
这些API很好的封装在了android.net包下的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的发送字节数
 */

2、NetworkStatsManager

NetworkStatsManager类是在Android 6.0API23中新增加的类提供网络使用历史统计信息同时特别强调了可查询指定时间间隔内的统计信息。
NetworkStatsManager类克服了TrafficStats的查询限制而且统计信息也不再是设备重启以来的数据。但它也有自己的限制和缺点。
1权限限制
NetworkStatsManager的使用需要额外的权限”android.permission.PACKAGE_USAGE_STATS”是系统权限需要引导用户开启应用的“有权查看使用情况的应用”使用记录访问权限权限
 

看看部分函数非静态
//查询指定网络类型在某时间间隔内的总的流量统计信息
NetworkStats.BucketquerySummaryForDevice(intnetworkType,StringsubscriberId,longstartTime,longendTime)
//查询某uid在指定网络类型和时间间隔内的流量统计信息
NetworkStats.queryDetailsForUid(intnetworkType,StringsubscriberId,longstartTime,longendTime,intuid)
//查询指定网络类型在某时间间隔内的详细的流量统计信息包括每个uid
NetworkStats.queryDetails(intnetworkType,StringsubscriberId,longstartTime,longendTime)

NetworkStatsManager networkStatsManager = (NetworkStatsManager) getSystemService(NETWORK_STATS_SERVICE);
NetworkStats.Bucket bucket = null;
// 获取到目前为止设备的Wi-Fi流量统计
bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, "", 0, System.currentTimeMillis());

java 获取当天今日零点零分零秒

两种方法 一种得到的是时间戳一种得到是日期格式

1.日期格式的

Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date zero = calendar.getTime();

2.时间戳


long current = System.currentTimeMillis();
long zero = current/(1000*3600*24)*(1000*3600*24) - TimeZone.getDefault().getRawOffset();

public static void main(String[] args) {
long current=System.currentTimeMillis();//当前时间毫秒数
long zero=current/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数
long twelve=zero+24*60*60*1000-1;//今天23点59分59秒的毫秒数
long yesterday=System.currentTimeMillis()-24*60*60*1000;//昨天这一时间的毫秒数
System.out.println(new Timestamp(current));//当前时间
System.out.println(new Timestamp(yesterday));//昨天这一时间点
System.out.println(new Timestamp(zero));//今天零点零分零秒
System.out.println(new Timestamp(twelve));//今天23点59分59秒
}

(213条消息) Android 统计流量数据_julie94212的博客-CSDN博客_android统计流量

java 获取当天今日零点零分零秒 (shuzhiduo.com) 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android