Android 6.0:UsageEvents 方法 'usageStatsManger.queryEvents()' 给出计数 0(零)

Android 6.0 : UsageEvents method 'usageStatsManger.queryEvents()' is giving count 0 (zero)

我创建了一个 Service,我在其中使用“UsageEvents”检查前景 activity。

private void getForegroundActivity() {
        String packageName = "";
        String className = "";
        Calendar cal_begin = Calendar.getInstance();
        cal_begin.set(Calendar.YEAR, -1);
        long _begTime = cal_begin.getTimeInMillis(); 
        long _endTime = System.currentTimeMillis();
        UsageStatsManager usageStatsManager = (UsageStatsManager)  this.getSystemService(Context.USAGE_STATS_SERVICE);

        if (usageStatsManager != null) {
            UsageEvents queryEvents = usageStatsManager.queryEvents(_begTime, _endTime);

            if (queryEvents != null) {
                UsageEvents.Event event = new UsageEvents.Event();

                while (queryEvents.hasNextEvent()) {
                    UsageEvents.Event eventAux = new UsageEvents.Event();
                    queryEvents.getNextEvent(eventAux);

                    if (eventAux.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
                        event = eventAux;
                    }
                }

                packageName = event.getPackageName();
                className = event.getClassName();
   }

上面的代码工作正常并给出了正确的前景 activity,但是一段时间后(比如说 2-3 小时后),'queryEvents(_begTime, _endTime)'returns '0' (零)计数 !!

Service 中是否有其他使用 usageStatsManager.queryEvents() 的方法?

如有任何其他指点和想法,我们将不胜感激。

queryEvents()返回的事件在系统中只保留几天。因此,您可能必须维护本地数据库以在本地维护这些统计信息。你的代码没有问题。

有关 queryEvents() 方法和 UsageStatsManager 的更多信息,请查看以下 link :

UsageStatsManager queryEvents