現在の日付 (00:00:00 から 23:59:59) のデバイス上の各パッケージの使用統計のみを取得するために、UsageStatsManager
クラスのメソッドを使用しようとしています。queryUsageStats
問題のコードは次のとおりです。
long startOfToday = TimeUtility.getStartOfToday();
long endOfToday = TimeUtility.getEndOfToday();
List<UsageStats> usageStats = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startOfToday, endOfToday);
1 日の開始と終了を取得する方法:
public static long getStartOfToday()
{
Calendar cStartOfDay = Calendar.getInstance();
cStartOfDay.set(Calendar.HOUR_OF_DAY, 0);
cStartOfDay.set(Calendar.MINUTE, 0);
cStartOfDay.set(Calendar.SECOND, 0);
cStartOfDay.set(Calendar.MILLISECOND, 0);
return cStartOfDay.getTimeInMillis();
}
public static long getEndOfToday()
{
Calendar cEndOfDay = Calendar.getInstance();
cEndOfDay.set(Calendar.HOUR_OF_DAY, 23);
cEndOfDay.set(Calendar.MINUTE, 59);
cEndOfDay.set(Calendar.SECOND, 59);
cEndOfDay.set(Calendar.MILLISECOND, 999);
return cEndOfDay.getTimeInMillis();
}
ドキュメントの理解に基づいて、達成しようとしているものに適切なパラメーターを渡しました。
しかし、奇妙なことに、デバッグ中にリストに返された UsageStats オブジェクトを調べると、多くのオブジェクトが時間を表す mBeginTimeStamp 値 (エポックからのミリ秒単位で測定された、UsageStats オブジェクトが表す時間範囲の開始を表す long 値) を持っています。前日から。たとえば、今日の 12 月 13 日の午前 11 時にテストしているときに、リスト内の 1 つのパッケージの mBeginTimeStamp 値が 12 月 12 日の午後 1 時を指していました。
私に関する限り、これらの値は、UTC 時間ではなく、ローカル タイム ゾーンでの時間の表現です。