【问题标题】:How to get usage stats for "current day" using usageStatsManager in android (kotlin)如何在android(kotlin)中使用usageStatsManager获取“当天”的使用统计信息
【发布时间】:2018-12-11 18:52:35
【问题描述】:

目标:
需要获取今天的使用情况统计信息(今天使用设备的总时间),即。上午 12 点到当前时间。

问题:
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)}")
}

例如,当上面的代码在 Wed 12 Dec 12.40 am 运行时,结果是:
(在 textView 中):
你花了 90 分钟
(在 textView2 中):
12 月 11 日星期二 16:23:19 GMT +05:30 2018 至
12 月 11 日星期二 19:38:45 GMT +05:30 2018

如何在 40 分钟内使用手机 90 分钟?
那些明显不相关的时间戳是什么意思?
我做错了什么来实现我的目标吗?

【问题讨论】:

标签: android android-studio kotlin usagestatsmanager


【解决方案1】:

我实际上遇到了类似的问题:

根据我对文档 firstTimeStamplastTimeStamp 的理解,应该给出“此 UsageStats 代表的时间范围的开始(结束)”。

然而,它们与我在queryAndAggregateUsageStats 中作为beginTimeendTime 给出的参数不同。

totalTimeInForeground 的结果似乎更愿意返回firstTimeStamp / lastTimeStamp 给出的时间跨度的结果,而不是请求的结果。

为此我用谷歌填了一个错误,请查看https://issuetracker.google.com/issues/118564471

【讨论】:

    【解决方案2】:

    我注意到您的方法存在一些问题。

    • 您缺少time.set(Calendar.SECOND,0)time.set(Calendar.MILLISECOND,0)
    • 精度在分区中丢失ft=value.totalTimeInForeground/60000

    我建议Java Time (ThreeTenBP) 更准确地处理 DateTimeDuration。我创建了一个新函数进行比较,结果确实不同。

    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.")
    }
    

    你的输出

    你花了 577 分钟。

    我的输出

    你花了 582 分钟。

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多