あるアプリの午前0時から現在時刻までのフォアグラウンド時間を知りたい。これが私がこれまでに試したことです
String PackageName = "Nothing";
long TimeInforground = 500;
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService("usagestats");
long time = System.currentTimeMillis();
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
List<UsageStats> stats = mUsageStatsManager.queryUsageStats( UsageStatsManager.INTERVAL_BEST,
c.getTimeInMillis(),
time );
if ( stats != null )
{
for ( UsageStats usageStats : stats )
{
if ( usageStats.getPackageName().contains("example.app") )
{
TimeInforground = usageStats.getTotalTimeInForeground();
PackageName = usageStats.getPackageName();
minutes = (int) ((TimeInforground / (1000 * 60)) % 60);
seconds = (int) (TimeInforground / 1000) % 60;
hours = (int) ((TimeInforground / (1000 * 60 * 60)) % 24);
Log.e("BAC", "PackageName is" + PackageName + "Time is: " + hours + "h" + ":" + minutes + "m" + seconds + "s");
break;
}
}
}
}
時刻が午前 12 時より少し長く、example.app が開かれていない場合、フォアグラウンド時刻は 0 になると思います。しかし、そうではないようです。午前 12 時にリセットされるのではなく、かなり後でリセットされる傾向があります。
UsageStatsManager に関するドキュメントがあまり見つかりませんでした。上記のコードは、私のニーズに合わせて StackOverflow の他の回答をわずかに変更したものです。
私も UsageStatsManager.INTERVAL_DAILY を試しましたが、それでも私の目的を正確に果たしているようには見えません。
どんな助けでも大歓迎です。