7

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;
}
4

0 に答える 0