1. 增加一个aidl文件:frameworks/base/core/java/android/os/ITestWslService.aidl
package android.os;
interface ITestWslService {
/**
* {@hide}
*/
void setValue(int val);
}
2. 把aidl写到/frameworks/base/Android.mk,注意是加到 “LOCAL_SRC_FILES += \ ” 下面
如:core/java/android/os/ITestWslService.aidl \
3. 在frameworks/base/services/java/com/android/server/ 新建要增加的service,
如:
package com.android.server;
import android.content.Context;
import android.os.Handler;
import android.os.ITestWslService;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.util.Log;
public class TestWslService extends ITestWslService.Stub {
private static final String TAG="TestWslService";
private TestWslWorkerThread mWorker;
private TestWslWorkerHandler mHandler;
private Context mContext;
public TestWslService(Context context) {
super();
mContext=context;
mWorker=newTestWslWorkerThread("TestWslServiceWorker");
mWorker.start();
Log.i(TAG, "Spawned worker thread");
}
public void setValue(int val)
{
Log.i(TAG, "setValue " + val);
Message msg=Message.obtain();
msg.what=TestWslWorkerHandler.MESSAGE_SET;
msg.arg1=val;
mHandler.sendMessage(msg);
}
private class TestWslWorkerThread extends Thread{
public TestWslWorkerThread(String name) {
super(name);
}
public void run() {
Looper.prepare();
mHandler=newTestWslWorkerHandler();
Looper.loop();
}
}
private class TestWslWorkerHandler 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 TestWslWorkerHandler.handleMessage:", e);
}
}
}
}
4. 将该service增加到Systemserver中,SystemService.java的目录是frameworks/base/services/java/com/android/server/SystemServer.java,增加代码如下:
ServiceManager.addService("testwsl", new TestWslService(context));
5.新建一个TestWslManager类,用于管理TestWslService,
首先在/frameworks/base/core/java/下新建一个package,命名为android.testwsl;
然后在该目录下新建一个TestWslManager类,具体代码如下:
package android.testwsl;
import android.os.ITestWslService;
import android.os.RemoteException;
import android.util.Log;
public class AnromCertManager {
ITestWslService service;
public AnromCertManager(ITestWslService service) {
this.service=service;
}
public void setValue(int val) {
try {
service.setValue(val);
} catch (RemoteException e) {
Log.d("anromwsl" , "setvalue fail");
e.printStackTrace();
}
}
}
6. 在ContextImpl中注册该service,ContextImpl.java的目录是/frameworks/base/core/java/android/app/ContextImpl.java,具体代码如下:
registerService(TESTWSL_SERVICE,newServiceFetcher() {
publicObject getService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(TESTWSL_SERVICE);
ITestWslService service = ITestWslService.Stub.asInterface(b);
returnnewTestWslManager(service);
}
});
SL_SERVICE 为TestWslService注册在SystemServer中的别名,在Context中定义
7. 新建一个Android工程,测试TestWslService
TestWslManagerad=null;
ad= (TestWslManager)getSystemService("testwsl");
ad.setValue(7);
到这基本就OK了!
原文:http://blog.csdn.net/aiai373824745/article/details/7439896