从java服务访问Android Context

时间:2012-12-10 20:04:17

标签: android android-intent

我正在尝试创建一个在系统服务器之外运行的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从命令行生成意图/广播,但无论如何都要接收广播。任何建议或建议都表示赞赏。

0 个答案:

没有答案