Подсчитайте, сколько раз каждое приложение используется за один день, используя 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 );
и все работает, счет правильный, спасибо