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 = new TestWslWorkerThread("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 = new TestWslWorkerHandler();
- 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, new ServiceFetcher() {
- public Object getService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(TESTWSL_SERVICE);
- ITestWslService service = ITestWslService.Stub.asInterface(b);
- return new TestWslManager(service);
- }
- });
- SL_SERVICE 为TestWslService注册在SystemServer中的别名,在Context中定义
7. 新建一个Android工程,测试TestWslService
- TestWslManager ad = null;
- ad = (TestWslManager)getSystemService("testwsl");
- ad.setValue(7);
到这基本就OK了!
原文:http://blog.csdn.net/aiai373824745/article/details/7439896