2011-09-29 7 views
5

すべてのアクティビティ開始を聞くサービスを開発する必要があります。 このようなことをする必要がありますか?アンドロイドはアプリの起動を聞きます

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(ブロードキャストの処置:そのアプリケーションを最初に起動したときに、アプリケーションのインストーラパッケージに送信され(それはそれは、停止状態から移動されて初めてです)

だから私はあなたのソリューションは、このために最善であると思います今。私の知る限り、クラスIActivityController.Stubandroid.appパッケージであることがわかっているよう

2

。 しかし、これは{@hide}インターフェースです(誰かが@hide APIにアクセスするいくつかの方法が持って言ったように)。

我々が設定することができますリスナーはこのようなアクティビティスイッチを聴く:

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

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

、クラスActivityManagerNativeも@hideです。 ActivityControllerはIActivityController.Stubを継承するクラスです。 @hide APIにアクセスする方法

  1. あなたはAndroid.jarが使用するhave-する@非表示APIを構築するには、Androidのソースコードを入手することができます。反射によって、
+0

これに関するノート:現代版のAndroidでは、 'setActivityController'を呼び出すには、あなたのアプリケーションがAndroidフレームワークに署名するための鍵で署名されている必要がある' SET_ACTIVITY_WATCHER'アクセス権が必要です。すべてのROMで動作するように設計されたサードパーティのアプリケーションです。 – FuegoFro

関連する問題