Objective:
Need to get the usage stats for today (total time for which the device was used today) ie. 12.00 am to current time.
Problem:
1.I get today\'s ti
I noticed several problems with your approach.
time.set(Calendar.SECOND,0)
and time.set(Calendar.MILLISECOND,0)
ft=value.totalTimeInForeground/60000
I would recommend Java Time (ThreeTenBP) to handle DateTime and Duration more accurately. I create a new function to compare and indeed the results are different.
fun showtime2(){
val start = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli()
val end = ZonedDateTime.now().toInstant().toEpochMilli()
val usageStatsManager = getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager
val stats = usageStatsManager.queryAndAggregateUsageStats(start, end)
val total = Duration.ofMillis(stats.values.map { it.totalTimeInForeground }.sum())
println("YOU SPENT ${total.toMinutes()} mins.")
}
Your output
YOU SPENT 577 mins.
My output
YOU SPENT 582 mins.
I actually experience a similar problem:
According to my understanding of the documentation firstTimeStamp
and lastTimeStamp
should give the "beginning (end) of the time range this UsageStats represents".
They differ however from what I give as an argument in queryAndAggregateUsageStats
as beginTime
and endTime
.
Also the result for the totalTimeInForeground
seems rather give back a result for the timespan given by firstTimeStamp
/ lastTimeStamp
than for the requested one.
I filled a bug with google for this, please have a look at https://issuetracker.google.com/issues/118564471.