gpt4 book ai didi

java - Android 手机使用历史 NetworkStatsManager

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:25 24 4
gpt4 key购买 nike

我正在为 Android 6.0 制作一个应用程序,我想使用新类 NetworkStatsManager 来获取移动数据使用情况。

我在 list 中添加了我需要的所有权限并需要权限运行时。

当我调用方法时:

bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, "", fromDate.getTime(), toDate.getTime());

返回 WIFI 使用的正确值。

但是如果我用 TYPE_MOBILE 替换 TYPE_WIFI,结果总是 0。

    NetworkStats.Bucket bucket = null;
try {
bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, "", fromDate.getTime(), toDate.getTime());

if(bucket == null){
Log.i("Info", "Error");
}else{
Log.i("Info", "Total: " + (bucket.getRxBytes() + bucket.getTxBytes()));
}

} catch (RemoteException e) {
e.printStackTrace();
}

最佳答案

我通过隐藏的 API ( android statistic 3g traffic for each APP, how? ) 找到了这个问题的解决方案,当尝试使用 TYPE_MOBILE 检索移动数据使用信息时,必须通知 SubscriberID,这与我尝试获取信息 TYPE WIFI 时不同。

试试这段代码

    TelephonyManager  tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String subscriberID = tm.getSubscriberId();

NetworkStats networkStatsByApp = networkStatsManager.queryDetailsForUid(ConnectivityManager.TYPE_MOBILE, subscriberID, start, end, uid);

因此,当您使用 TYPE_MOBILE 时,您必须使用有效的 subscriberID。

关于java - Android 手机使用历史 NetworkStatsManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com