Я хочу получить мобильное потребление данных за указанный диапазон дат (1, 2, 5, 10 или 15 минут) с помощью метода querySummaryForDevice в NetworkStatsManager.
Это мой код:
public static long getTotalTrafficInRange(Context context, Date fromDate, Date toDate) throws UsageStatsNotActiveException, NoPermissionException
{
boolean usageStatsActive = doIHavePermission(context);
if (!usageStatsActive) {
throw new UsageStatsNotActiveException(context);
}
long total = 0;
TelephonyManager tele = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
throw new NoPermissionException(Manifest.permission.READ_PHONE_STATE);
}
String actualSubscriberId = tele.getSubscriberId();
NetworkStatsManager networkStatsManager = (NetworkStatsManager) context.getSystemService(Context.NETWORK_STATS_SERVICE);
Date from = ConvertDateToCalendar(fromDate);
Date to = ConvertDateToCalendar(toDate);
//Total
NetworkStats.Bucket bucket;
try {
bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, actualSubscriberId, from.getTime(), to.getTime());
if(bucket != null){
total = (bucket.getRxBytes() + bucket.getTxBytes());
}
} catch (RemoteException e) {
e.printStackTrace();
}
return total;
}
Я пытался преобразовать свою дату в календаре и обратно в Date с помощью этого кода:
public static Date ConvertDateToCalendar(Date date)
{
Calendar fromDateCalendar = Calendar.getInstance();
fromDateCalendar.setTime(date);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, fromDateCalendar.get(Calendar.YEAR));
calendar.set(Calendar.MONTH, fromDateCalendar.get(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, fromDateCalendar.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, fromDateCalendar.get(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, fromDateCalendar.get(Calendar.MINUTE));
calendar.set(Calendar.SECOND, fromDateCalendar.get(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, fromDateCalendar.get(Calendar.MILLISECOND));
return calendar.getTime();
}
Это fromDate и toDate:
//this date is new Date() minus 1,2,3,5,10 or 15 minutes, not more then this values
fromDate = new Date(PersistentHelper.getLastDateUsedForCalculateData(context));
//Calculate toDate
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
if(!userChangeDateManually || !userChangeZone) {
calendar.set(Calendar.SECOND, 0);
}
calendar.add(Calendar.MILLISECOND, -1);
toDateWS = calendar.getTime();
Но totalBytesвозвращенный getTotalTrafficInRange это не реально.Если у меня есть телефон в WIFI в течение 1 часа, а затем я вызываю свою функцию с fromDate 15 минут назад, он возвращает очень длинное значение, а не 0. Как и ожидалось.
Существует ограничение на диапазон дат запроса querySummaryForDevice.метод NetworkStatsManager?Никакой подсказки не найдено в документации.
Кто-нибудь заметил это странное поведение?