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 を 1 回開くと、1 日の使用回数が 2 単位増加する (1 単位ではなく) ことに気付きましたが、Facebook やデフォルトのブラウザーなどの他のアプリの場合、カウントは問題ありません。
コードにバグはありますか?インストールされているすべてのアプリケーションで機能しないのはなぜですか? 同じ結果を得る別の方法はありますか?