android系统接口:应用流量统计

/**
     * 获取所有流量总和 wifi和移动数据,单位字节
     * @param context
     * @param startTime 开始统计时间
     * @param endTime   结束统计时间
     * @return 移动和wifi流量数据总和
     */
    public long getUsageFromSummaryTotal(Context context, long startTime, long endTime) {
        long mobileAndWifiData = 0;
        //移动总流量数据
        long mobileTotalData = 0;
        //wifi总流量数据
        long wifiTotalData = 0;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            NetworkStatsManager nsm = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);
            assert nsm != null;
            try{
                //querySummaryForUser   整个设备的汇总数据使用情况。
                NetworkStats.Bucket mobileBucket = nsm.querySummaryForUser(ConnectivityManager.TYPE_MOBILE, null, startTime, endTime);
                mobileTotalData = mobileBucket.getTxBytes() + mobileBucket.getRxBytes();

                NetworkStats.Bucket wifiBucket = nsm.querySummaryForUser(ConnectivityManager.TYPE_WIFI, null, startTime, endTime);
                wifiTotalData = wifiBucket.getTxBytes() + wifiBucket.getRxBytes();

                mobileAndWifiData = mobileTotalData + wifiTotalData;
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        Log.d(THIS_FILE,"mobileAndWifiData: " + mobileAndWifiData);
        return mobileAndWifiData;
    }

    /**
     * 获取应用wifi数据流量总和,单位字节
     * @param context   应用上下文对象
     * @param startTime 开始统计时间
     * @param endTime   结束统计时间
     * @return wifi流量数据总和
     */
    public long getTotalUsageWifiData(Context context, long startTime, long endTime) {
        //wifi总流量数据
        long wifiTotalData = 0;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            NetworkStatsManager nsm = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);
            assert nsm != null;
            try{
                //querySummaryForUser   整个设备的汇总数据使用情况。
                NetworkStats.Bucket wifiBucket = nsm.querySummaryForUser(ConnectivityManager.TYPE_WIFI, null, startTime, endTime);
                wifiTotalData = wifiBucket.getTxBytes() + wifiBucket.getRxBytes();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        Log.d(THIS_FILE,"wifiTotalData: " + wifiTotalData);
        return wifiTotalData;
    }

    /**
     * 获取应用移动数据流量总和,单位字节
     * @param context   应用上下文对象
     * @param startTime 开始统计时间
     * @param endTime   结束统计时间
     * @return 移动流量数据总和
     */
    public long getTotalUsageMobileData(Context context, long startTime, long endTime) {
        //移动总流量数据
        long mobileTotalData = 0;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            NetworkStatsManager nsm = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);
            assert nsm != null;
            try{
                //querySummaryForUser   整个设备的汇总数据使用情况。
                NetworkStats.Bucket mobileBucket = nsm.querySummaryForUser(ConnectivityManager.TYPE_MOBILE, null, startTime, endTime);
                mobileTotalData = mobileBucket.getTxBytes() + mobileBucket.getRxBytes();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        Log.d(THIS_FILE,"mobileTotalData: " + mobileTotalData);
        return mobileTotalData;
    }
    
  public long getFirstDay() {
        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.DAY_OF_MONTH, 1);
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 0);
        //将秒至0
        calendar.set(Calendar.SECOND,0);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 0);
        //获得当前月第一天
        Date first = calendar.getTime();
        //当前月第一天时间戳
        long firstDay = first.getTime();

        return firstDay;
    }

    public long getLastDay() {
        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.DAY_OF_MONTH, 1);
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 0);
        //将秒至0
        calendar.set(Calendar.SECOND,0);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 0);
        //将当前月加1;
        calendar.add(Calendar.MONTH, 1);
        //在当前月的下一月基础上减去1毫秒
        calendar.add(Calendar.MILLISECOND, -1);
        //获得当前月最后一天
        Date last = calendar.getTime();
        //当前月最后一天时间戳
        long lastDay = last.getTime();

        return lastDay;
    }

    public String getDataSize(String size) {
        double length = Double.parseDouble(size);
        //如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
        if (length < 1024) {
            return length + "B";
        } else {
            length = length / 1024.0;
        }
        //如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
        //因为还没有到达要使用另一个单位的时候
        //接下去以此类推
        if (length < 1024) {
            return Math.round(length * 100) / 100.0 + "KB";
        } else {
            length = length / 1024.0;
        }
        if (length < 1024) {
            //因为如果以MB为单位的话,要保留最后1位小数,
            //因此,把此数乘以100之后再取余
            return Math.round(length * 100) / 100.0 + "MB";
        } else {
            //否则如果要以GB为单位的,先除于1024再作同样的处理
            return Math.round(length / 1024 * 100) / 100.0 + "GB";
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值