Подсчитайте, сколько раз каждое приложение используется за один день, используя UsageEvents, UsageEvents.Event и MOVE_TO_FOREGROUND.

С помощью UsageStatsManager и UsageStats я могу получать ежедневное использование (в часах, минутах и ​​секундах) каждого приложения на моем смартфоне. Теперь я хочу узнать, есть ли способ получения ежедневной частоты использования (в количестве раз, то есть 1 раз, 2 раза и т. Д.) Каждого приложения на моем смартфоне.

Читая документацию, я понял, что этого можно достичь с помощью UsageEvents, UsageEvents.Event и MOVE_TO_FOREGROUND. Поэтому я написал следующий код:

// Get the app statistics since one day ago from the current time.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR_OF_DAY, -1);

/* Query for events in the given time range. Events are only kept by the system for a few days.
 * NOTE: The last few minutes of the event log will be truncated to prevent abuse by applications. */
UsageEvents queryEvents = mUsageStatsManager.queryEvents(
            cal.getTimeInMillis(),     //begin-time
            System.currentTimeMillis()); //end-time

ArrayList<String> packagesNames = new ArrayList<>();

// I get a list with package names having an event of "MOVE_TO_FOREGROUND"
while (queryEvents.hasNextEvent()) {
        UsageEvents.Event eventAux = new UsageEvents.Event();
        queryEvents.getNextEvent(eventAux);
        if (eventAux.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
            packagesNames.add(eventAux.getPackageName());
            System.out.println(eventAux.getPackageName()+" "+eventAux.MOVE_TO_FOREGROUND );
        }
}

// I count the occurrences of each packet name.
Set<String> unique = new HashSet<String>(packagesName);
for (String key : unique) {
        System.out.println(key + ": " + Collections.frequency(packagesName, key));
}

Но после нескольких тестов я заметил, что, например, если я открываю один раз WhatsApp, его ежедневное использование увеличивается на 2 единицы (а не на 1 единицу), в то время как для других приложений, таких как Facebook или браузер по умолчанию, это нормально.

Есть ли ошибка в коде? Почему не работает для всех установленных приложений? Есть ли другой способ получить тот же результат? Заранее спасибо.

0 ответов

Привет , я пробовал этот код, у меня тоже была такая же проблема с WhatsApp, но я пытаюсь удалить этот код

System.out.println(eventAux.getPackageName()+" "+eventAux.MOVE_TO_FOREGROUND );

и все работает, счет правильный, спасибо

Другие вопросы по тегам