日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

getRunningTasks和getRunningAppProcesses失效

發布時間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 getRunningTasks和getRunningAppProcesses失效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 5.0以上的getRunningTasks失效,該方法可以獲得在前臺運行的系統進程。可以用getRunningAppProcesses方法暫時替代。

android6.0以上的getRunningAppProcesses也失效,系統關閉了三方軟件對系統進程的訪問,出于安全考慮。

參考資料:

  • http://blog.csdn.NET/hyhyl1990/article/details/45700447
  • http://www.cnblogs.com/luoyangcn/p/4936830.html

替代方案

  • AndroidProcesses:Get running processes on Android

  • 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,所以只能判斷當前列表有沒有你需要監控的包名。

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>{@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這段時間內的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();}

總結

以上是生活随笔為你收集整理的getRunningTasks和getRunningAppProcesses失效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。