Как подсчитать время использования приложения, когда приложение находится на переднем плане?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как подсчитать время использования приложения, когда приложение находится на переднем плане?

Сообщение Anonymous »


Я работаю над приложением для Android, позволяющим отслеживать ежедневное использование приложения. Идея состоит в том, что пользователь может установить дневной лимит времени для любого приложения, и уведомление появится не позднее, чем через 2 минуты после превышения лимита. (Причина задержки: я создал систему сигнализации с использованием класса AlarmManager, которая будет срабатывать каждую минуту для запуска JobIntentService, который будет проверять, превышен ли лимит для какого-либо приложения. )

Я использовал метод queryEvents класса UsageStatsManager для подсчета времени использования приложения.

Вот мой код для подсчета времени использования приложения (я следил за тем, как использовать queryEvents):

HashMap getTimeSpent (Контекст контекста, String packageName, long BeginTime, long EndTime) { UsageEvents.Event currentEvent; List allEvents = новый ArrayList(); HashMap appUsageMap = new HashMap(); UsageStatsManager useStatsManager = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE); UsageEvents UsageEvents = UsageStatsManager.queryEvents(beginTime, endTime); в то время как (usageEvents.hasNextEvent()) { currentEvent = новый UsageEvents.Event(); useEvents.getNextEvent(currentEvent); if(currentEvent.getPackageName().equals(packageName) || packageName == null) { если (currentEvent.getEventType() == UsageEvents.Event.ACTIVITY_RESUMED || currentEvent.getEventType() == UsageEvents.Event.ACTIVITY_PAUSED) { allEvents.add(currentEvent); Строковый ключ = currentEvent.getPackageName(); если (appUsageMap.get(key) == null) appUsageMap.put(ключ, 0); } } } for (int i = 0; i < allEvents.size() - 1; i++) { UsageEvents.Event E0 = allEvents.get(i); UsageEvents.Event E1 = allEvents.get(i + 1); если (E0.getEventType() == UsageEvents.Event.ACTIVITY_RESUMED && E1.getEventType() == UsageEvents.Event.ACTIVITY_PAUSED && E0.getClassName().equals(E1.getClassName()))) { int diff = (int)(E1.getTimeStamp() - E0.getTimeStamp()); разница /= 1000; Целое число prev = appUsageMap.get(E0.getPackageName()); если (предыдущая == NULL) предыдущая = 0; appUsageMap.put(E0.getPackageName(), prev + diff); } } вернуть приложениеUsageMap; } Короче, приведенный выше код подсчитывает разницу во времени между меткой времени, когда приложение переходит на передний план (UsageEvents.Event.ACTIVITY_RESUMED) и меткой времени, когда оно переходит в фоновый режим (UsageEvents.Event.ACTIVITY_PAUSED) ). Затем эта разница добавляется к общему времени использования приложения.

Проблема в том, что время, проведенное на переднем плане, невозможно подсчитать, если приложение не переходит в фоновый режим. Таким образом, если лимит использования превышен, уведомление не появится, пока приложение не перейдет в фоновый режим.

Можно ли на самом деле получить время на переднем плане, пока приложение находится на переднем плане?

Примечание. Я попробовал queryUsageStats вместе с UsageStats.getTotalTimeInForeground(), но не смог добиться успеха, поскольку у queryUsageStats были другие проблемы, не связанные с этим вопросом.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»