1

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 やデフォルトのブラウザーなどの他のアプリの場合、カウントは問題ありません。

コードにバグはありますか?インストールされているすべてのアプリケーションで機能しないのはなぜですか? 同じ結果を得る別の方法はありますか?

4

1 に答える 1