【发布时间】:2016-08-16 09:39:40
【问题描述】:
我正在尝试使用 UsageStatsManager 在带有 Marshmallow 的 Nexus 5 上获取前台应用程序。我记得它曾经可以工作,但由于某种原因,我现在得到了包/类名称的空字符串。
这是我的实现
public String[] getForegroundPackageNameClassNameByUsageStats() {
String packageNameByUsageStats = null;
String classByUsageStats = null;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");
final long INTERVAL = 1000;
final long end = System.currentTimeMillis();
final long begin = end - INTERVAL;
final UsageEvents usageEvents = mUsageStatsManager.queryEvents(begin, end);
while (usageEvents.hasNextEvent()) {
UsageEvents.Event event = new UsageEvents.Event();
usageEvents.getNextEvent(event);
if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
packageNameByUsageStats = event.getPackageName();
classByUsageStats = event.getClassName();
Log.d(TAG, "packageNameByUsageStats is" + packageNameByUsageStats + ", classByUsageStats is " + classByUsageStats);
}
}
}
return new String[]{packageNameByUsageStats,classByUsageStats};
}
由于某种原因,它没有进入 while 循环,即 usageEvents.hasNextEvent() 为 false。因此,它返回 null 包/类名。
知道我做错了什么吗?
谢谢。
【问题讨论】:
-
大多数人认为它有效,因为在测试时喜欢经常切换应用程序以快速检查它是否有效。当前台应用程序的最后一次更改是在很久以前时,问题就来了。