its*_*sam 5 android kotlin android-studio usagestatsmanager
目标:
需要获取今天的使用统计信息(今天使用设备的总时间),即。12.00 am 到当前时间。
问题: 1.
我得到今天的时间 + 一些其他不可解释的时间
2.不可解释的时间戳(getTimestamp 方法检索到的使用统计的开始和结束)
时间段不相关。我将开始时间指定为上午 12 点,将结束时间指定为当前时间,但是对于使用情况统计数据,我得到了完全不相关的“.firstTimeStamp”和“.lastTimeStamp”(它们应该返回使用统计数据的开始和结束)。
*已经完成了权限授予部分,这是我用来以分钟为单位获取总时间的函数。
fun showtime(){
val time=Calendar.getInstance()
time.set(Calendar.HOUR_OF_DAY,0)
time.set(Calendar.MINUTE,0)
val start=time.timeInMillis
val end= System.currentTimeMillis()
val usageStatsManager = getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager
var stats = usageStatsManager.queryAndAggregateUsageStats(start,end)
var x:Long=0
var ft:Long=0
var v:Long=0
var l:Long=0
for ((key,value) in stats) {
ft=value.totalTimeInForeground/60000
textField1.append("$key = $ft mins")
textField1.append("\n")
x=x+ft
v=value.firstTimeStamp
l=value.lastTimeStamp
}
textView.setText("YOU SPENT $x mins.")
textView2.setText("${Date(v)} to \n${Date(l)}")
}
Run Code Online (Sandbox Code Playgroud)
例如,当上述代码在 12 月 12 日星期三 12:40 am 运行时,结果是:(
在
textView 中):你花了 90 分钟
(在textView2中):
Tue 11 Dec 16:23:19 GMT +05:30 2018 to
Tue 12 月 11 日 19:38:45 GMT +05:30 2018
如何在短短 40 分钟内使用手机 90 分钟?
那些明显不相关的时间戳是什么意思?
为了实现我的目标,我做错了什么吗?
我注意到你的方法有几个问题。
time.set(Calendar.SECOND,0)
并且time.set(Calendar.MILLISECOND,0)
ft=value.totalTimeInForeground/60000
我建议使用Java Time (ThreeTenBP)来更准确地处理DateTime和Duration。我创建了一个新函数来比较,结果确实不同。
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.")
}
Run Code Online (Sandbox Code Playgroud)
你的输出
您花了 577 分钟。
我的输出
您花了 582 分钟。
归档时间: |
|
查看次数: |
1162 次 |
最近记录: |