Получение неверных данных из статистики использования Android

я пытаюсь получить данные об использовании пользователя с помощью Usagestats ... но я получаю неправильные данные ... я хочу получить ежедневное использование «с 00:00:00 до 23:59:59»

    Calendar cal = Calendar.getInstance();

      cal.add(Calendar.DAY_OF_WEEK, -1); \\ the missing line


    UsageStatsManager uStateManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
   List<UsageStats> usageList = uStateManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, cal.getTimeInMillis(), System.currentTimeMillis());

когда я использую .getTotalTimeInForeground(), я получаю результат, отличный от ожидаемого? Можете ли вы помочь мне настроить правильный путь, потому что я пробовал много разных способов, но не получил ожидаемого результата? Спасибо


person Younes    schedule 29.08.2017    source источник
comment
Не эксперт по UsageStatsManager, но уверены ли вы, что правильно передавать календарное время в качестве второго параметра? 2-й параметр ожидает времени начала, и просто передав туда Calendar.getInstance(), он почти равен System.currentTimeMillis(), поэтому вы запрашиваете статистику использования для временного интервала, например, 10 мс. Может, попробовать пройти туда 0.   -  person Syex    schedule 29.08.2017
comment
спасибо за ваш ответ, на самом деле я пропустил здесь одну строку кода .. это cal.add(Calendar.DAY_OF_WEEK, -1); ... я отредактировал приведенный выше код... поэтому, пожалуйста, перепроверьте его   -  person Younes    schedule 29.08.2017


Ответы (1)


Этот вопрос немного устарел, но я довольно долго боролся с UsageStatsManager и обнаружил несколько вещей, которые могут быть полезны другим. Вот несколько советов, которые помогут вам решить эту проблему.

  • Calendar.getInstance() возвращает "объект Calendar, поля календаря которого были инициализированы текущей датой и временем". (ссылка). Если вы чтобы получить ежедневное использование в это время, вам нужно установить их вручную на полночь.
  • Похоже, что UsageStatsManager использует время UTC для хранения всех своих данных. Поэтому при запросе обязательно настройте время для этого.
  • Я обнаружил, что статистика ежедневного использования с использованием queryUsageStats совершенно ненадежна. Даже с корректировкой времени UTC кажется, что в зависимости от времени суток он будет отправлять вчерашнюю статистику вместо сегодняшней.

Существует не так много документации о том, как они решают, какую статистику учитывать при запросе этого метода, что делает его довольно ненадежным. При расчете ежедневной статистики я настоятельно рекомендую вместо этого использовать UsageEvents и вручную рассчитывать время. Вычисленное время соответствует тому, что возвращает queryUsageStats (при условии, что этот метод возвращает правильную статистику), что для меня является достаточным доказательством того, что оно достаточно надежно для отслеживания переднего плана. Подробнее о том, как это сделать по этому вопросу, и у меня добавил туда свою реализацию (ссылка).

person jguerinet    schedule 01.06.2018