Android で最近導入された UsageStatsManager クラスを使用して、アプリが最後に使用された日時を読み取ろうとしています。
しかし、問題があります。ほとんどのアプリで適切な結果が得られます。ただし、呼び出し用の一部のアプリでappUsageStats.get(appInformation.packageName).getLastTimeUsed()
は、正しくない 4 桁のミリ秒が返されます。
添付されているのは、真の呼び出し元アプリの 8738 を示す評価ウィンドウのスクリーン ショットです。これはバグですか、それとも何か間違っていますか?
注: 観察として、この API はmLastTimeSystemUsed
が と同じ場合に正しい結果を返しますmLastTimeUsed
。参考までに。
以下のコード スニペット:
Map<String, UsageStats> appUsageStats = UStats.getMapOfAggregatedUsage(MainActivity.this);
if(appUsageStats.get(appInformation.packageName)!=null) {
long used = appUsageStats.get(appInformation.packageName).getLastTimeUsed();
long installedDiff2 = new Date().getTime() - new Date(used).getTime();
long daysGap = TimeUnit.DAYS.convert(installedDiff2, TimeUnit.MILLISECONDS);
if(daysGap == 0) {
appInfoObj.setAppUsedDate("Used : Today");
} else {
appInfoObj.setAppUsedDate("Used : " + String.valueOf(daysGap) + " days ago");
}
appInfoObj.setAppUsedDateNumber(daysGap);
}
UStats クラス メソッド:
public static Map<String, UsageStats> getMapOfAggregatedUsage(Context context) {
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.YEAR, -1);
long startTime = calendar.getTimeInMillis();
return getUsageStatsManager(context).queryAndAggregateUsageStats(startTime,endTime);
// return null;
}