我正在尝试创建一个在系统服务器之外运行的java服务,它将从启动开始,基于配置可以监控Android设备并监听广播。我无法找到关于如何编写一个长期运行的java服务的文档,该服务作为一个不是由zygote启动的进程运行。我正在尝试修改平台,此服务将添加到通过重建Android源生成的自定义system.img。
该服务的启动类似于用于从adb运行的脚本。
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
我发现尝试添加守护进程的唯一示例是实现在设备上运行的完全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从命令行生成意图/广播,但无论如何都要接收广播。任何建议或建议都表示赞赏。