Android6.0 及以上设备查看流量使用情况
Android 大约 2589 字所需权限
<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();
}
阅读 5373 · 发布于 2019-04-13
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Rust 标准库 API 环境变量参数 vars阅读 381
-
JVM:运行时数据区之程序计数器阅读 900
-
微信小程序渲染富文本 HTML 标签阅读 3957
-
Vue v-pre 加载 {{}}阅读 444
-
MySQL 之 where 和 having 的区别阅读 1710
-
Spring Boot 配置文件中设置 List 和 Map阅读 6166
-
Notepad++ 保存 Ctrl-S 显示 DC3 ,搜索 Ctrl-F 显示 ACK 解决办法阅读 7501
-
软考-系统架构设计师:DNS 协议阅读 3638
-
Android 闪屏页全屏显示阅读 3300
-
PHP 使用 json_encode 格式化下标不为 0 开始的数组会转为对象阅读 2923