android 添加 system service,Android增加一个System Service

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值