2011-09-29 131 views
5

我需要開發一個服務,聽每個活動的開始。 我必須做這樣的事嗎?android聽取應用程序啓動

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses(); 
for (int i = 0; i < runningAppProcessInfo.size(); i++) { 
    Log.v("Proc: ", runningAppProcessInfo.get(i).processName); 
} 

我需要每隔X秒做一次嗎?它會影響電池消耗嗎?

+1

附加信息:ActivityManager.getRunningTasks(1)將從正在運行的任務列表中返回第一個任務。這項任務似乎始終是前景中的一項。 – black

回答

1

據我所知,目前還沒有辦法來聽應用程序的啓動,除非它是第一次啓動。 ACTION_PACKAGE_FIRST_LAUNCH(廣播事件:發送當該應用程序第一次啓動(即它第一次被移出停止狀態的)應用程序的安裝包

所以我想您的解決方案是最適合這種現在。

2

據我知道有一類IActivityController.Stubandroid.app包。 但這是{@hide}接口(有人說,有一些方法來訪問@hide API)。

我們可以設置一個監聽器聽這樣的活動開關:

mAm = ActivityManagerNative.getDefault();   
    try { 
     mAm.setActivityController(new ActivityController()); 

    } catch (RemoteException e) { 
     System.err.println("** Failed talking with activity manager!");} 

和Class ActivityManagerNative也是@hide也是。 ActivityController是一個擴展了IActivityController.Stub的類。

如何訪問@hide API:

  1. 可以獲取Android源代碼,以建立一個享有以下權利─@隱藏-API的android.jar使用。
  2. 通過反思。
+0

有關此的一個注意事項:在現代版本的Android上,調用'setActivityController'需要'SET_ACTIVITY_WATCHER'權限,該權限要求您的應用程序使用用於簽署Android框架的密鑰進行簽名,如果您正在開發一個旨在運行在所有ROM上的第三方應用程序。 – FuegoFro