分享

【转】Android添加一个系统service

 techres 2012-02-13

//文章系转载,版权归原作者所有。
// 本人仅在原文基础上加了序号

Android添加一个系统service  

1、Specifying the interface.
       This example uses aidl, so the first step is to:
1). add an interface definition file:

frameworks/base/core/java/android/os/IEneaService.aidl

package android.os;
interface IEneaService {
/**
* {@hide}
*/
void setValue(int val);
}

The interface file will need to be 
2)、added to the build system:

frameworks/base/Android.mk

     Add the following around line 165 (the end of the list of SRC_FILES):

core/java/android/os/IEneaService.aidl

2、Implementing the server
     
The service spawns a worker thread that will do all the work, as part of the system server process. Since the service is created by the system server, it will need to be located somewhere where the system server can find it.

frameworks/base/services/java/com/android/server/EneaService.java

package com.android.server;
import android.content.Context;
import android.os.Handler;
import android.os.IEneaService;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.util.Log;

public class EneaService extends IEneaService.Stub {
private static final String TAG = "EneaService";
private EneaWorkerThread mWorker;
private EneaWorkerHandler mHandler;
private Context mContext;
public EneaService(Context context) {
super();
mContext = context;
mWorker = new EneaWorkerThread("EneaServiceWorker");
mWorker.start();
Log.i(TAG, "Spawned worker thread");
}
public void setValue(int val)
{
Log.i(TAG, "setValue " + val);
Message msg = Message.obtain();
msg.what = EneaWorkerHandler.MESSAGE_SET;
msg.arg1 = val;
mHandler.sendMessage(msg);
}
private class EneaWorkerThread extends Thread{
public EneaWorkerThread(String name) {
super(name);
}
public void run() {
Looper.prepare();
mHandler = new EneaWorkerHandler();
Looper.loop();
}
}
private class EneaWorkerHandler extends Handler {
private static final int MESSAGE_SET = 0;
@Override
public void handleMessage(Message msg) {
try {
if (msg.what == MESSAGE_SET) {
Log.i(TAG, "set message received: " + msg.arg1);
}
} catch (Exception e) {
// Log, don't crash!
Log.e(TAG, "Exception in EneaWorkerHandler.handleMessage:", e);
}
}
}
}

3、Add to the system server

services/java/com/android/server/SystemServer.java
try {
Log.i(TAG, "Enea Service");
ServiceManager.addService(Context. ENEA_SERVICE, new EneaService(context));
} catch (Throwable e) {
Log.e(TAG, "Failure starting Enea Service",     e);
}

4、Add a constant value to Context

./core/java/android/content/Context.java
public static final String ENEA_SERVICE = "enea";

5、最后进行编译
make update-api
make

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多