getRunningTasks和getRunningAppProcesses失效
2017-02-21 01:43
344 查看
Android 5.0以上的getRunningTasks失效,该方法可以获得在前台运行的系统进程。可以用getRunningAppProcesses方法暂时替代。
android6.0以上的getRunningAppProcesses也失效,系统关闭了三方软件对系统进程的访问,出于安全考虑。
参考资料:
http://blog.csdn.NET/hyhyl1990/article/details/45700447
http://www.cnblogs.com/luoyangcn/p/4936830.html
AndroidProcess:判断App位于前台或者后台的6种方法
Android 5.1.1 and above - getRunningAppProcesses() returns my application package only
Android5.1.+ getRunningAppProcesses()获取运行中进程(第三方开源库)
可以通过以下两种方式得到topActivity的信息:
1、利用ActivityManager.getRunningAppProcesses();获得当前正在运行的所有应用程序的进程。然后根据当前进程信息里的importance和processState来确定当前在顶部的进程。不过这里得到的进程信息里只有被载入当前进程的所有包名pkgList,所以只能判断当前列表有没有你需要监控的包名。
2、利用UsageStatsManager,并且调用他的queryUsageStats方法来获得启动的历史记录,调用这个方法需要设置权限“Apps withusage access”。但是这个queryUsageStats只能查询一段时间内的使用状态,如果时间间隔较短,并且一段时间不使用手机,获得的列表就可能为空。
android6.0以上的getRunningAppProcesses也失效,系统关闭了三方软件对系统进程的访问,出于安全考虑。
参考资料:
http://blog.csdn.NET/hyhyl1990/article/details/45700447
http://www.cnblogs.com/luoyangcn/p/4936830.html
替代方案
AndroidProcesses:Get running processes on AndroidAndroidProcess:判断App位于前台或者后台的6种方法
Android 5.1.1 and above - getRunningAppProcesses() returns my application package only
Android5.1.+ 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(); }
相关文章推荐
- [实践] Android5.1.1源码 - getRunningTasks解除限制获得完整信息
- getRunningTasks 在安卓5.0失效
- ActivityManager.getRunningTasks笔记
- getRunningTasks API从Android LL开始 权限收敛
- android L 变化之 ActivityManager.getRunningTasks不能获取当前的task列表
- getRunningTasks() deprecated之后如何获得topActivity
- getRunningTask API
- 安卓5.0后 getRunningAppProcesses返回列表为null的处理方法
- DotNetNuke 5 User's Guide Get Your Website Up and Running读书摘录2
- Asynchronous Android读书笔记六Long-running Tasks with Service
- [Vue] Get up and running with vue-router
- 安卓5.0后 getRunningAppProcesses返回列表为null的处理方法
- DotNetNuke 5 User's Guide Get Your Website Up and Running读书摘录3
- GetBuiltProjectOutputRecursive error running Xamarin Forms iOS on Visual Studio
- 10 steps to get Ruby on Rails running on Windows with IIS FastCGI- 摘自网络
- getTasks: caller 10035 does not hold REAL_GET_TASKS; limiting output的处理
- Android5.1.+ getRunningAppProcesses()获取运行中进程(第三方开源库)
- DotNetNuke 5 User's Guide: Get Your Website Up and Running
- Get Information about All Running Services Remotely
- SQL server, get all running sessions on the SQL server