我找到了这个方法来获取前台活动:
public String getRecentActivity(Context context) { //I cut out the pre API 22 part of the method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 30, System.currentTimeMillis() + (10 * 1000));
UsageEvents.Event event = new UsageEvents.Event();
while (usageEvents.hasNextEvent()) {
usageEvents.getNextEvent(event);
}
if (!TextUtils.isEmpty(event.getPackageName()) && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
return event.getPackageName();
}
}
return " ";
}这就是问题所在:当有一个前台服务在运行时,这个方法返回一个空的包名,而不是前台活动的包名(即return " ";)。如何让它返回前台活动?有没有办法从usageEvents中过滤掉服务?
发布于 2020-12-07 21:49:25
如果使用queryUsageStates而不是quertEvent,我希望它能修复
public String getRecentActivity(){
String mpackageName = "";
UsageStatsManager usage = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 30, time);
if (stats != null) {
SortedMap<Long, UsageStats> runningTask = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
runningTask.put(usageStats.getLastTimeUsed(), usageStats);
}
if (runningTask.isEmpty()) {
mpackageName = "";
} else {
mpackageName = runningTask.get(runningTask.lastKey()).getPackageName();
}
}
return mpackageName;
}发布于 2020-12-08 07:21:07
如果有人想知道答案,我想出来了:
public String getRecentActivity(Context context) { //Only works for APIs above or equal to 22
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 30, System.currentTimeMillis() + (10 * 1000));
UsageEvents.Event event = new UsageEvents.Event();
String packageName = " ";
while (usageEvents.hasNextEvent()) {
usageEvents.getNextEvent(event);
if (!TextUtils.isEmpty(event.getPackageName()) && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND)
packageName = event.getPackageName();
}
return packageName;
}
return " ";
}https://stackoverflow.com/questions/65181534
复制相似问题