我创建了一个服务,我使用' UsageEvents '检查前景活动。
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();
}
上面的代码运行正常并提供了正确的前景活动,但过了一段时间(比如说2-3小时后),'queryEvents(_begTime, _endTime)
'返回'0'(零)计数!!
在服务中使用usageStatsManager.queryEvents()
还有其他方法吗?
任何其他指示,赞赏的想法。
答案 0 :(得分:0)
queryEvents()
返回的事件仅由系统保留几天。因此,您可能必须维护本地数据库以在本地维护这些统计信息。您的代码没有问题。
有关queryEvents()
方法和UsageStatsManager的更多信息,请查看以下链接: