有没有办法在 android 中知道 3rd 方应用程序是否在后台运行?

问题描述

如果我的应用正在运行,我想确保第 3 方应用始终在运行。 但是,如果第 3 方应用程序已经在后台打开,我不想重新启动它。 所以我需要检查第 3 方应用是否已经在运行。

我知道在 Lolipop 之后这将不再起作用:

 private ArrayList<String> getRunningApps(){
    ArrayList<String> runningApps = new ArrayList<>();

    final ActivityManager activityManager = (ActivityManager) getBaseContext().getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();

    for(ActivityManager.RunningAppProcessInfo rapi:procInfos){
        runningApps.add(rapi.processName);
    }

    return runningApps;
}

我已经尝试使用以下代码通过 UsageStatsManager 获取正在运行的应用程序:

    UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService(USAGE_STATS_SERVICE);
    long time = System.currentTimeMillis();
    List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,time - 3000,time);


    if(stats != null) {
        SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>();
        for (UsageStats usageStats : stats) {
            mySortedMap.put(usageStats.getLastTimeUsed(),usageStats);
            Log.d("RunningAppProcessInfo","Package name : "+usageStats.getPackageName());
        }

    }

经过一些研究,我发现这似乎是解决方案。但是无法知道使用情况统计中的应用当前是否正在运行,因为即使我关闭应用,它们仍然会出现在此列表中。

UsageStats 有一个 .lastTimeUsed() 函数,但即使应用程序当前在后台运行,它也不会提供当前时间。

如果绝对需要,也欢迎具有 root 权限的解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)