我正在嘗試創建一個在系統服務器之外運行的Java服務,它將從啓動啓動,它基於配置可以監控Android設備並偵聽廣播。我一直無法找到關於如何編寫長時間運行的java服務的文檔,該服務作爲zygote未啓動的進程運行。我正在嘗試修改平臺,並將此服務添加到通過重建Android源代碼生成的自定義system.img中。從Java服務訪問Android上下文
該服務將啓動類似於用於從adb運行am的腳本。
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "[email protected]"
,我發現嘗試添加守護進程的唯一的例子已經充分執行該設備上運行native services。
Embedded Android描述了Android用戶空間和一些運行在那裏的本機守護程序,以及如何創建服務並將它們添加到init以便在設備引導時啓動,至少在Zygote和System Server之前。
public class Monitor{
public static void main(String [] args){
new Monitor.run();
}
public void run(){
Application app = new Application();
Context con = app.getApplicationContext();
BroadcastReceiver receiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent){
Log.i(TAG, "Received intent:"+ intent.getAction());
}
}
IntentFilter filter = new IntentFilter("android.intent.action.TIME_TICK")
}
}
我也根據ActivityManagerService中的一段代碼嘗試過。 public class Monitor { private Context mContext;
Monitor(){
Looper.prepare()
ActivityThread at = ActivityThread.systemMain();
mContext = at.getSystemContext();
}
public static void main(String [] args){
new Monitor.run();
}
public void run(){
BroadcastReceiver receiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent){
Log.i(TAG, "Received intent:"+ intent.getAction());
}
}
IntentFilter filter = new IntentFiler("android.intent.action.AIRPLANE_MODE");
mContext.registerReceiver(receiver,filter);
}
}
我可以使用adb和am從命令行生成意圖/廣播,但是無論如何都可以接收廣播。任何意見或建議表示讚賞。