相关疑难解决方法(0)

Android:UsageStatsManager没有返回正确的每日结果

我试图查询UsageStatsUsageStatsManager,与返回的日常使用所有应用程序包的出发点和多长时间.

代码:

public static List<UsageStats> getUsageStatsList(Context context){
    UsageStatsManager usm = getUsageStatsManager(context);
    Calendar calendar = Calendar.getInstance();
    long endTime = calendar.getTimeInMillis();
    calendar.add(Calendar.DAY_OF_YEAR, -1);
    long startTime = calendar.getTimeInMillis();

    List<UsageStats> usageStatsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,startTime, endTime);
    return usageStatsList;
}
Run Code Online (Sandbox Code Playgroud)

我有一个警报,每天在午夜之前触发并查询用户状态,然后存储返回的数据.起初一切似乎工作正常,我得到包结果和他们的活动时间,但是我添加了一个功能,每小时检查一次结果,这是我发现一个奇怪的发现.

结果UsageStatsManager似乎是在不同的时间重置,而不是在午夜,这是我所期望的,考虑到我INTERVAL_DAILY用作搜索参数.

根据我保存的数据包"时间"结果似乎重置(粗略时间):

  • 凌晨3点
  • 正午
  • 下午3点
  • 午夜

我意识到封装时序重置之间存在相关性,但这是否意味着发生?

我已经看过以下线程了,我从中得到了很多信息: 如何使用UsageStatsManager?

因此: Android UsageStatsManager产生错误的输出? 在评论中提到,返回的数据queryUsageStats不可信,并且返回随机结果.

我错过了一些简单的东西还是UsageStatsManager运作不正常?

java android usage-statistics activity-manager usagestatsmanager

8
推荐指数
2
解决办法
3923
查看次数

应用程序在前台时如何计算应用程序使用时间?

我正在开发一个用于跟踪日常应用使用情况的 android 应用。这个想法是用户可以为任何应用程序设置每日时间限制,并且在超过限制后最多 2 分钟内会出现通知。(延迟的原因:我已经使用AlarmManager类创建了一个警报系统,该类将每分钟关闭一次以运行JobIntentService,它将检查是否超出了任何应用程序的限制)

我用queryEvents的方法UsageStatsManager类来计算应用程式使用时间。

这是我计算应用程序使用时间的代码(我遵循了如何使用 queryEvents):

HashMap<String, Integer> getTimeSpent(Context context, String packageName, long beginTime, long endTime) {
    UsageEvents.Event currentEvent;
    List<UsageEvents.Event> allEvents = new ArrayList<>();
    HashMap<String, Integer> appUsageMap = new HashMap<>();

    UsageStatsManager usageStatsManager = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
    UsageEvents usageEvents = usageStatsManager.queryEvents(beginTime, endTime);

    while (usageEvents.hasNextEvent()) {
        currentEvent = new UsageEvents.Event();
        usageEvents.getNextEvent(currentEvent);
        if(currentEvent.getPackageName().equals(packageName) || packageName == null) {
            if (currentEvent.getEventType() == UsageEvents.Event.ACTIVITY_RESUMED
                    || currentEvent.getEventType() == UsageEvents.Event.ACTIVITY_PAUSED) {
                allEvents.add(currentEvent);
                String key = currentEvent.getPackageName();
                if …
Run Code Online (Sandbox Code Playgroud)

android usagestatsmanager

5
推荐指数
1
解决办法
823
查看次数