使用activityManager.getRunningAppProcesses()获取(实际)前台进程?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (430)

我正在尝试确定用户当前可见的应用程序。为此,我使用该activityManager.getRunningAppProcesses()方法。

我知道该方法不支持Android 5.1.1 。

在开始时它正常,我遍历RunningAppProcessInfos列表并检查其重要性。

tl; dr获取当前前景过程并防止错误定位的正确方法是什么?如何完成列表的顺序 - API表示它没有被指定。有没有办法正确命令他们?

ActivityManager返回的列表在每个设备上都不相同。某些设备会返回多个重要信息100(即FOREGROUND),即使该进程当前不可见也是如此。

这造成了我有很多误报的问题。

我认识到,有些设备通过最近的流程排序列表。所以我决定尝试以下方法:

ActivityManager.RunningAppProcessInfo appProcess = appProcesses.get(0);
        final String processName = appProcess.processName;
        final String packageName = removeProcessSuffix(processName);
        if (appProcess.importance == FOREGROUND || appProcess.importance == VISIBLE){
            //do something, like the toast
        }

用appProcesses.get(0); 我只研究第一个元素,错误消失了。没有误报。

但是,现在在一些设备上我根本没有得到前台进程。因为他们没有以任何方式排列名单。例如,一些4.2索尼智能手机是一些候选人。我得到了这个列表,但目前真正可见的进程在索引11左右。

我不知道该怎么做,以获得当前的前景过程,而没有误报。

什么是正确的方法来获得当前的前景过程并防止错误的postives?如何完成列表的顺序 - API表示它没有被指定。有没有办法正确命令他们?

谢谢!

提问于
用户回答回答于

UsageStatsManager是获得当前运行的应用程序的唯一官方API。

下面是使用UsageStatsManager:

Calendar endCal = Calendar.getInstance();
Calendar beginCal = Calendar.getInstance();
beginCal.add(Calendar.MINUTE, -30);
UsageStatsManager manager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> stats =  manager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,  
    beginCal.getTimeInMillis(), endCal.getTimeInMillis());
Collections.sort(stats, new Comparator<UsageStats>() {

  @Override public int compare(UsageStats lhs, UsageStats rhs) {
    long time1 = lhs.getLastTimeUsed();
    long time2 = rhs.getLastTimeUsed();
    if (time1 > time2) {
      return -1;
    } else if (time1 < time2) {
      return 1;
    }
    return 0;
  }
});
// The first "UsageStats" in the list will be the top application.
// If the list is empty you will need to ask for permissions to use UsageStatsManager
// To request permission:
// startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

扫码关注云+社区

领取腾讯云代金券