getRunningTasks和getRunningAppProcesses失效
Android 5.0以上的getRunningTasks失效,該方法可以獲得在前臺(tái)運(yùn)行的系統(tǒng)進(jìn)程??梢杂胓etRunningAppProcesses方法暫時(shí)替代。
android6.0以上的getRunningAppProcesses也失效,系統(tǒng)關(guān)閉了三方軟件對(duì)系統(tǒng)進(jìn)程的訪問,出于安全考慮。
參考資料:
- http://blog.csdn.NET/hyhyl1990/article/details/45700447
- http://www.cnblogs.com/luoyangcn/p/4936830.html
替代方案
AndroidProcesses:Get running processes on Android
AndroidProcess:判斷App位于前臺(tái)或者后臺(tái)的6種方法
Android 5.1.1 and above - getRunningAppProcesses() returns my application package only
Android5.1.+ getRunningAppProcesses()獲取運(yùn)行中進(jìn)程(第三方開源庫)
可以通過以下兩種方式得到topActivity的信息:
1、利用ActivityManager.getRunningAppProcesses();獲得當(dāng)前正在運(yùn)行的所有應(yīng)用程序的進(jìn)程。然后根據(jù)當(dāng)前進(jìn)程信息里的importance和processState來確定當(dāng)前在頂部的進(jìn)程。不過這里得到的進(jìn)程信息里只有被載入當(dāng)前進(jìn)程的所有包名pkgList,所以只能判斷當(dāng)前列表有沒有你需要監(jiān)控的包名。
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,并且調(diào)用他的queryUsageStats方法來獲得啟動(dòng)的歷史記錄,調(diào)用這個(gè)方法需要設(shè)置權(quán)限“Apps withusage access”。但是這個(gè)queryUsageStats只能查詢一段時(shí)間內(nèi)的使用狀態(tài),如果時(shí)間間隔較短,并且一段時(shí)間不使用手機(jī),獲得的列表就可能為空。
static class RecentUseComparator implements Comparator<UsageStats>{@Overridepublic 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這段時(shí)間內(nèi)的UsageStats,由于要設(shè)定時(shí)間限制,所以有可能獲取不到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();}總結(jié)
以上是生活随笔為你收集整理的getRunningTasks和getRunningAppProcesses失效的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.lang.NoSuchMeth
- 下一篇: getRunningTask API