• Android getRunningTasks和getRunningAppProcesses失效


    Android 5.0以上的getRunningTasks失效,该方法可以获得在前台运行的系统进程。可以用getRunningAppProcesses方法暂时替代。

    android6.0以上的getRunningAppProcesses也失效,系统关闭了三方软件对系统进程的访问,出于安全考虑。

    参考资料:

    替代方案

    可以通过以下两种方式得到topActivity的信息:

    1、利用ActivityManager.getRunningAppProcesses();获得当前正在运行的所有应用程序的进程。然后根据当前进程信息里的importance和processState来确定当前在顶部的进程。不过这里得到的进程信息里只有被载入当前进程的所有包名pkgList,所以只能判断当前列表有没有你需要监控的包名。

    private String[] getActivePackages(Context context) {
    
            ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    
            final Set<String> activePackages= new HashSet<String>();
    
            final List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
    
            for(ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
    
                if (processInfo.importance ==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
    
                        && processInfo.processState == ActivityManager.START_TASK_TO_FRONT){
    
                    activePackages.addAll(Arrays.asList(processInfo.pkgList));
    
                    Log.d(TAG,"====processInfo.processState " + processInfo.processState + processInfo.processName);
    
                }
    
            }
    
            return activePackages.toArray(new String[activePackages.size()]);
    
        }

    2、利用UsageStatsManager,并且调用他的queryUsageStats方法来获得启动的历史记录,调用这个方法需要设置权限“Apps withusage access”。但是这个queryUsageStats只能查询一段时间内的使用状态,如果时间间隔较短,并且一段时间不使用手机,获得的列表就可能为空。

    static class RecentUseComparator implements Comparator<UsageStats>
    
        {
    
            @Override
            public int compare(UsageStats lhs,UsageStats rhs) {
    
                return (lhs.getLastTimeUsed() > rhs.getLastTimeUsed()) ? -1 : (lhs.getLastTimeUsed()== rhs.getLastTimeUsed()) ? 0 : 1;
            }
    
        }
    
    
    
        private StringgetTopPackage(Context context) {
    
            long ts = System.currentTimeMillis();
    
            RecentUseComparator mRecentComp = new RecentUseComparator();
    
            UsageStatsManager mUsageStatsManager =(UsageStatsManager) context.getSystemService("usagestats");
            //查询ts-10000 到ts这段时间内的UsageStats,由于要设定时间限制,所以有可能获取不到
            List<UsageStats> usageStats =mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,ts - 10000, ts);  
    
            if (usageStats == null) return "";
            if (usageStats.size() == 0) return "";
            Collections.sort(usageStats,mRecentComp);
            Log.d(TAG,"====usageStats.get(0).getPackageName()"+ usageStats.get(0).getPackageName());
            return usageStats.get(0).getPackageName();
        }
  • 相关阅读:
    web10 动态action的应用
    web09 struts2配置 struts2入门
    web 08 struts2入门 struts2配置 struts包
    web07-jdbcBookStore
    web06-PanduanLogin
    web05-CounterServlet
    web04-LoginServlet
    web03-OutputInfo
    web02-welcomeyou
    web01-helloworld
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9342067.html
Copyright © 2020-2023  润新知