zoukankan      html  css  js  c++  java
  • TrafficStatsUtil

    package com.android.demo.lileidemo.utils;

    import android.Manifest;
    import android.app.usage.NetworkStats;
    import android.app.usage.NetworkStatsManager;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.net.ConnectivityManager;
    import android.os.RemoteException;
    import android.support.v4.app.ActivityCompat;
    import android.telephony.TelephonyManager;

    import com.android.demo.lileidemo.MyApplication;
    import com.android.demo.lileidemo.constant.AppConstants;

    /**
    * date: 03/19/2020.
    * author: lilei.
    */
    public class TrafficStatsUtil {
    private static final String TAG = AppConstants.APP_TAG + "TrafficStatsUtil ";
    private static volatile TrafficStatsUtil mInstance;
    private static final boolean DEBUG = false;
    private Context mContext;

    /**
    * get Instance.
    *
    * @return instance.
    */
    public static TrafficStatsUtil getInstance() {
    if (mInstance == null) {
    synchronized (TrafficStatsUtil.class) {
    if (mInstance == null) {
    mInstance = new TrafficStatsUtil();
    }
    }
    }
    return mInstance;
    }

    public TrafficStatsUtil() {
    mContext = MyApplication.getAppContext();
    }

    /**
    * getTotalWifiTraffic from startTimeMillis to endTimeMillis.
    *
    * @param startTimeMillis Start time milliseconds.
    * @param endTimeMillis End time milliseconds.
    * @return milliseconds.
    */
    public long getTotalWifiTraffic(long startTimeMillis, long endTimeMillis) {
    if (null == mContext) {
    return -1;
    }
    NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
    Context.NETWORK_STATS_SERVICE);
    NetworkStats.Bucket bucket = null;
    try {
    bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI,
    "", startTimeMillis, endTimeMillis);
    } catch (RemoteException e) {
    e.printStackTrace();
    }
    long summaryRx = bucket.getRxBytes();
    long summaryTx = bucket.getTxBytes();
    long summaryTotal = summaryRx + summaryTx;
    if (DEBUG) {
    LogUtil.d(TAG + "getTotalWifiTraffic() summaryTotal: " + summaryTotal + " summaryRx:"
    + summaryRx + " summaryTx:" + summaryTx);
    }
    return summaryTotal;
    }

    /**
    * Get App Wifi Traffic for packageName from startTimeMillis to endTimeMillis.
    *
    * @param packageName app name.
    * @param startTimeMillis Start time milliseconds.
    * @param endTimeMillis End time milliseconds.
    * @return milliseconds.
    */
    public long getAppWifiTraffic(String packageName, long startTimeMillis, long endTimeMillis) {
    if (null == mContext) {
    return -1;
    }
    int uid = ActivityUtil.getUidByPackageName(mContext, packageName);

    NetworkStats summaryStats = null;
    long summaryRx = 0;
    long summaryTx = 0;
    NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
    long summaryTotal = 0;
    NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
    Context.NETWORK_STATS_SERVICE);
    try {
    summaryStats = networkStatsManager.querySummary(ConnectivityManager.TYPE_WIFI,
    null, startTimeMillis, endTimeMillis);
    } catch (RemoteException e) {
    e.printStackTrace();
    }
    do {
    summaryStats.getNextBucket(summaryBucket);
    int summaryUid = summaryBucket.getUid();
    if (uid == summaryUid) {
    summaryRx += summaryBucket.getRxBytes();
    summaryTx += summaryBucket.getTxBytes();
    if (DEBUG) {
    LogUtil.d(TAG + "getAppWifiTraffic() 11 uid:" + summaryUid + " rx:"
    + summaryBucket.getRxBytes() + " tx:" + summaryBucket.getTxBytes());
    }
    }

    } while (summaryStats.hasNextBucket());

    summaryTotal = summaryRx + summaryTx;
    if (DEBUG) {
    LogUtil.d(TAG + "getAppWifiTraffic() 22 packageName:" + packageName + " summaryTotal:" + summaryTotal + " summaryRx:"
    + summaryRx + " summaryTx:" + summaryTx);
    }
    return summaryTotal;
    }

    /**
    * getTotalMobileTraffic from startTimeMillis to endTimeMillis.
    *
    * @param startTimeMillis Start time milliseconds.
    * @param endTimeMillis End time milliseconds.
    * @return milliseconds.
    */
    public long getTotalMobileTraffic(long startTimeMillis, long endTimeMillis) {
    if (null == mContext) {
    return -1;
    }
    //get subscriberId
    TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
    LogUtil.d(TAG + "getTotalMobileTraffic() no Permission for READ_PHONE_STATE");
    return -1;
    }
    String subscriberId = tm.getSubscriberId();

    NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
    Context.NETWORK_STATS_SERVICE);
    NetworkStats.Bucket bucket = null;
    try {
    bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE,
    subscriberId, startTimeMillis, endTimeMillis);
    } catch (RemoteException e) {
    e.printStackTrace();
    }
    long summaryRx = bucket.getRxBytes();
    long summaryTx = bucket.getTxBytes();
    long summaryTotal = summaryRx + summaryTx;
    if (DEBUG) {
    LogUtil.d(TAG + "getTotalMobileTraffic() summaryTotal: " + summaryTotal + " summaryRx:"
    + summaryRx + " summaryTx:" + summaryTx);
    }
    return summaryTotal;
    }

    /**
    * Get App Mobile Traffic for packageName from startTimeMillis to endTimeMillis.
    *
    * @param packageName app name.
    * @param startTimeMillis Start time milliseconds.
    * @param endTimeMillis End time milliseconds.
    * @return milliseconds.
    */
    public long getAppMobileTraffic(String packageName, long startTimeMillis, long endTimeMillis) {
    int uid = ActivityUtil.getUidByPackageName(mContext, packageName);

    //get subscriberId
    TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
    LogUtil.d(TAG + "getAppMobileTraffic() no Permission for READ_PHONE_STATE");
    return -1;
    }
    String subscriberId = tm.getSubscriberId();
    NetworkStats summaryStats = null;
    long summaryRx = 0;
    long summaryTx = 0;
    NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
    long summaryTotal = 0;
    NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
    Context.NETWORK_STATS_SERVICE);
    try {
    summaryStats = networkStatsManager.querySummary(ConnectivityManager.TYPE_MOBILE,
    subscriberId, startTimeMillis, endTimeMillis);
    } catch (RemoteException e) {
    e.printStackTrace();
    }
    do {
    summaryStats.getNextBucket(summaryBucket);
    int summaryUid = summaryBucket.getUid();
    if (uid == summaryUid) {
    summaryRx += summaryBucket.getRxBytes();
    summaryTx += summaryBucket.getTxBytes();
    if (DEBUG) {
    LogUtil.d(TAG + "getAppMobileTraffic() 11 uid:" + summaryUid + " rx:"
    + summaryBucket.getRxBytes() + " tx:" + summaryBucket.getTxBytes());
    }
    }
    } while (summaryStats.hasNextBucket());
    summaryTotal = summaryRx + summaryTx;
    if (DEBUG) {
    LogUtil.d(TAG + "getAppMobileTraffic() 22 packageName:" + packageName + " summaryTotal:"
    + summaryTotal + " summaryRx:" + summaryRx + " summaryTx:" + summaryTx);
    }

    return summaryTotal;
    }
    }
  • 相关阅读:
    HTTP网页错误代码大全带解释
    记录一下手把手教您做电商网站
    C#中的Attribute
    C#中dynamic的正确用法
    【CSP】最大的矩形
    【CSP】字符与int
    C++数组初始化
    C++中输出字符到文本文档
    C++ 中时钟函数的使用
    各种函数的头文件
  • 原文地址:https://www.cnblogs.com/adamli/p/13139835.html
Copyright © 2011-2022 走看看