微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有没有办法在 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 举报,一经查实,本站将立刻删除。