- 方法一:使用getRunningTasks (int maxNum) 或是getRunningAppProcesses ()
- 優點:不需額外權限。
- 可獲得其他activity。
- 缺點:getRunningTasks (int maxNum) Android 5+不適用
- 當background service被kill掉會失效;除非service設為START_STICKY,kill後自動啟動。
範例[1]
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE) ; //獲得系統運行的process List<ActivityManager.RunningAppProcessInfo> appList1 = mActivityManager.getRunningAppProcesses(); for (RunningAppProcessInfo running : appList1) { System.out.println(running.processName); } System.out.println("================"); //獲得當前正在運行的service List<ActivityManager.RunningServiceInfo> appList2 = mActivityManager.getRunningServices(100); for (ActivityManager.RunningServiceInfo running : appList2) { System.out.println(running.service.getClassName()); } System.out.println("================"); //獲得當前正在運行的activity List<ActivityManager.RunningTaskInfo> appList3 = mActivityManager.getRunningTasks(1000); for (ActivityManager.RunningTaskInfo running : appList3) { System.out.println(running.baseActivity.getClassName()); } System.out.println("================"); //獲得最近運行的應用 List<ActivityManager.RecentTaskInfo> appList4 = mActivityManager.getRecentTasks(100, 1); for (ActivityManager.RecentTaskInfo running : appList4) { System.out.println(running.origActivity.getClassName()); }
===================================================================
- 方法二:ActivityLifecycleCallbacks
- 優點:不需額外權限,Android 4+適用
- 缺點:只能取得自身foreground activity,無法取得其他foreground activity。
===================================================================
- 方法三:讀取/proc底下訊息( linux kernal core會把process info儲存在/proc目錄下,可用shell獲取此資訊,再透過屬性判斷為foreground process)
- 優點:不需額外權限
- 可獲得其他activity。
- 缺點:當/proc目錄下,檔案過多,此方法耗時。
- 此方法可能算是android下的漏洞,有可能被改掉。
===================================================================
- 方法四:UsageStatsManager (Google教學範例)
- 優點:正統做法,Android 5+有效
- 可獲得其他activity。
- 缺點:需開啟額外權限。
===================================================================
- 方法五:協助工具
- 續~等我測試後成功再補上
沒有留言:
張貼留言