Android 使用TrafficStats计算Youtube使用率
我使用TrafficStats检查youtube应用程序的数据使用情况。在一些设备上,它工作正常,但与其他许多设备不兼容。 我发现,从开发者网站上看,这些统计数据可能并不适用于所有平台。如果此设备不支持统计信息,则将返回UNSUPPORTED 那么在这种情况下,我如何获得设备应用程序的使用率 我在用 TrafficStats.getUidRxBytes(packageInfo.uid)+TrafficStats.getUidTxBytes(packageInfo.uid) 每次都返回-1。我们可以使用NetworkStats。 请看我得到线索的回购协议样本。 我们也可以看到类似的stackoverflow问题。 然后我需要修改一些特定设备的逻辑。在这些设备中,常规方法不会返回正确的使用值。所以我修改的是 /* 获取移动和wifi的youtube使用率。 */ 我们可以使用NetworkStats。 请看我得到线索的回购协议样本。 我们也可以看到类似的stackoverflow问题。 然后我需要修改一些特定设备的逻辑。在这些设备中,常规方法不会返回正确的使用值。所以我修改的是 /* 获取移动和wifi的youtube使用率。 */Android 使用TrafficStats计算Youtube使用率,android,youtube,network-traffic,android-data-usage,Android,Youtube,Network Traffic,Android Data Usage,我使用TrafficStats检查youtube应用程序的数据使用情况。在一些设备上,它工作正常,但与其他许多设备不兼容。 我发现,从开发者网站上看,这些统计数据可能并不适用于所有平台。如果此设备不支持统计信息,则将返回UNSUPPORTED 那么在这种情况下,我如何获得设备应用程序的使用率 我在用 TrafficStats.getUidRxBytes(packageInfo.uid)+TrafficStats.getUidTxBytes(packageInfo.uid) 每次都返回-1。我们可
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 "";
}