Android增加一个System Service
2012-04-23 17:07
351 查看
1. 增加一个aidl文件:frameworks/base/core/java/android/os/ITestWslService.aidl
2. 把aidl写到/frameworks/base/Android.mk,注意是加到 “LOCAL_SRC_FILES += \ ” 下面
如:core/java/android/os/ITestWslService.aidl \
3. 在frameworks/base/services/java/com/android/server/ 新建要增加的service,
如:
4. 将该service增加到Systemserver中,SystemService.java的目录是frameworks/base/services/java/com/android/server/SystemServer.java,增加代码如下:
5.新建一个TestWslManager类,用于管理TestWslService,
首先在/frameworks/base/core/java/下新建一个package,命名为android.testwsl;
然后在该目录下新建一个TestWslManager类,具体代码如下:
6. 在ContextImpl中注册该service,ContextImpl.java的目录是/frameworks/base/core/java/android/app/ContextImpl.java,具体代码如下:
7. 新建一个Android工程,测试TestWslService
到这基本就OK了!
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); } }); // TESTWSL_SERVICE 为TestWslService注册在SystemServer中的别名,在Context中定义
7. 新建一个Android工程,测试TestWslService
TestWslManager ad = null; ad = (TestWslManager)getSystemService("testwsl"); ad.setValue(7);
到这基本就OK了!
相关文章推荐
- Android增加一个System Service
- android init.rc增加一个自定义的service
- getSystemService()是Android很重要的一个API
- [Android Pro] service中显示一个dialog 或者通过windowmanage显示view
- Android的 getSystemService
- 【Android Native Code开发系列】一个Native Service的完整示例 1234567
- WCF部署时的异常错误“System.BadImageFormatException: 未能加载文件或程序集“GCGL_Service”或它的某一个依赖项。试图加载格式不正确的程序。”
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- 继文章‘’ 自己动手写一个轻量级的Android网络请求框架‘’补充------增加进度回调
- 原创:Android怎么让一个service开机自动启动
- 编写一个Android应用程序测试HelloService
- Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager
- 《System Service Call-oriented Symbolic Execution of Android Framework with Applications to...》论文阅读笔记
- android实现一个service
- Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager
- android上怎样让一个Service开机自动启动
- android中LayoutInflater的3种使用以及getSystemService的API
- 如何实现一个只有广播和service的android应用没有activity
- 【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(3-2)Android 和 Service 的交互之POST方式
- Android增加一个物理按键检测步骤