使用流量stats我正在检查youtube应用程序数据使用情况。在某些设备中,它可以正常工作,但与许多其他设备相关。我发现从开发人员站点中,这些统计信息可能并非在所有平台上可用。如果该设备不支持统计信息,则将返回不支持的。
因此,在这种情况下,我如何获取设备应用程序的使用?
我正在使用clabilstats.getUidrxBytes(packageinfo.uid) clabilstats.getuidtxbytes(packageinfo.uid);
这每次都返回-1。
我们可以使用NetworkStats。https://developer.android.com/reference/android/app/usage/networkstats.html请查看我得到线索的样本回购。https://github.com/robertzagorski/networkstats我们也可以看到一个类似的Stackoverflow问题。使用NetworkStatsManager获取移动数据使用历史记录
然后,我需要为某些特定设备修改此逻辑。在这些设备中,普通方法不会返回适当的用法值。所以我修改为
/* 为移动设备和WiFi提供YouTube使用量。 */
public long getYoutubeTotalusage(Context context) {
String subId = getSubscriberId(context, ConnectivityManager.TYPE_MOBILE);
//both mobile and wifi usage is calculating. For mobile usage we need subscriberid. For wifi we can give it as empty string value.
return getYoutubeUsage(ConnectivityManager.TYPE_MOBILE, subId) + getYoutubeUsage(ConnectivityManager.TYPE_WIFI, "");
}
private long getYoutubeUsage(int networkType, String subScriberId) {
NetworkStats networkStatsByApp;
long currentYoutubeUsage = 0L;
try {
networkStatsByApp = networkStatsManager.querySummary(networkType, subScriberId, 0, System.currentTimeMillis());
do {
NetworkStats.Bucket bucket = new NetworkStats.Bucket();
networkStatsByApp.getNextBucket(bucket);
if (bucket.getUid() == packageUid) {
//rajeesh : in some devices this is immediately looping twice and the second iteration is returning correct value. So result returning is moved to the end.
currentYoutubeUsage = (bucket.getRxBytes() + bucket.getTxBytes());
}
} while (networkStatsByApp.hasNextBucket());
} catch (RemoteException e) {
e.printStackTrace();
}
return currentYoutubeUsage;
}
private String getSubscriberId(Context context, int networkType) {
if (ConnectivityManager.TYPE_MOBILE == networkType) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSubscriberId();
}
return "";
}