搜尋此網誌

2016年4月4日 星期一

【Android】如何取得目前前景(foreground) activity

快速筆記筆記,如有錯誤,歡迎底下留言告知

範例[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下的漏洞,有可能被改掉。
範例[2]:AndroidProcesses(Third Party Library@github.io)


===================================================================
===================================================================
  • 方法五:協助工具
    • 續~等我測試後成功再補上

沒有留言: