Android6.0及以上设备查看流量使用情况
Android NetworkStatsManager 大约 2587 字所需权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
初始化NetworkStatsManager
mNetworkStatsManager = (NetworkStatsManager) context.getSystemService(NETWORK_STATS_SERVICE);
// 获取subscriberId
TelephonyManager tm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
try {
mSubId = tm.getSubscriberId();
} catch (Exception e) {
mSubId = "";
e.printStackTrace();
}
- 获取月初到目前为止设备的Mobile流量统计
public long getMobileFlow() {
long mobileFlow = 0;
try {
NetworkStats.Bucket bucket;
bucket = mNetworkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, mSubId, getTimesMonthMorning(), System.currentTimeMillis());
mobileFlow = bucket.getRxBytes() + bucket.getTxBytes();
} catch (Exception e) {
e.printStackTrace();
}
return mobileFlow;
}
- 获取单个应用月初到目前为止设备的WiFi流量统计
private long getWiFiFlowByUid(int uid){
NetworkStats summaryStats;
NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
long summaryTotal = 0;
try {
summaryStats = mNetworkStatsManager.queryDetailsForUid(
ConnectivityManager.TYPE_WIFI, mSubId, 0, System.currentTimeMillis(),uid);
do {
summaryStats.getNextBucket(summaryBucket);
summaryTotal += summaryBucket.getRxBytes() + summaryBucket.getTxBytes();
} while (summaryStats.hasNextBucket());
} catch (Exception e) {
e.printStackTrace();
}
return summaryTotal;
}
- 获取单个应用月初到目前为止设备的Mobile流量统计
private long getMobileFlowByUid(int uid){
NetworkStats summaryStats;
NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
long summaryTotal = 0;
try {
summaryStats = mNetworkStatsManager.queryDetailsForUid(
ConnectivityManager.TYPE_MOBILE, mSubId, 0, System.currentTimeMillis(),uid);
do {
summaryStats.getNextBucket(summaryBucket);
summaryTotal += summaryBucket.getRxBytes() + summaryBucket.getTxBytes();
} while (summaryStats.hasNextBucket());
} catch (Exception e) {
e.printStackTrace();
}
return summaryTotal;
}
- 获取月初的毫秒值
private long getTimesMonthMorning() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTimeInMillis();
}
阅读 1905 · 发布于 2019-04-13
————        END        ————
扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Android音量调节阅读 1498
-
PostgreSQL duplicate key violates unique constraint阅读 180
-
Java代码表示UML依赖/泛化/实现/关联/聚合/组合关系阅读 1201
-
PhpStorm设置大括号不换行阅读 2475
-
VMware Workstation与Hyper-V不兼容阅读 1559
-
Nginx查看已安装模块阅读 1125
-
设计模式之原型模式 - 深拷贝和浅拷贝阅读 422
-
Safari浏览器white-space: pre无效阅读 1673
-
nginx: [emerg] unknown directive "if($request_uri" in阅读 1753
-
Linux之CentOS yum安装PHP7.2阅读 710