2014-04-26 171 views
1

我想運行一個服務,每當一個新的應用程序在Android設備上啓動。如何在新應用程序啓動時啓動服務?

我正在爲android系統構建一個基於行爲的反病毒程序。它通過收集應用程序的系統調用痕跡來工作。一切都很好,除了我如何安排服務運行以覆蓋所有應用程序。一種方法是,我計劃以特定的時間間隔運行它。然而,更符合邏輯的是每次啓動新應用程序時運行它。該服務一旦啓動將收集正在運行的應用程序(我使用strace程序)的系統調用數據,通過網絡將數據發送到遠程服務器,遠程服務器進行所有處理並終止。有關我如何能夠完成此任務(新應用程序啓動時運行服務)的任何提示(在發佈此問題之前,我已廣泛搜索)?

我在android上不是很有經驗。有沒有其他方法可以在android上安裝所有應用程序,只要它們運行?

回答

1

無法檢測應用程序啓動。您沒有任何broadcast receiver意圖在應用程序啓動時通知。

您可以在device bootreceiver上啓動您的service並查找正在運行的應用程序。

編寫自定義接收器來啓動服務這樣

public class CustomReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(Context context, Intent intent) { 
    context.startService(new Intent(context,CustomService.class)); 
    } 
} 

並註冊爲引導完整的清單。

<receiver android:name="com.stackwork.app.services.CustomReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

此外,添加許可用於接收啓動完成廣播

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
相關問題