Android增加一个System Service

1. 增加一个aidl文件:frameworks/base/core/java/android/os/ITestWslService.aidl

[html]  view plain copy
  1. package android.os;  
  2. interface ITestWslService {  
  3.   /**  
  4.   * {@hide}  
  5.   */  
  6.   void setValue(int val);  
  7. }  

2. 把aidl写到/frameworks/base/Android.mk,注意是加到 “LOCAL_SRC_FILES += \ ” 下面
如:core/java/android/os/ITestWslService.aidl \

3. 在frameworks/base/services/java/com/android/server/ 新建要增加的service,
如:


[html]  view plain copy
  1. package com.android.server;  
  2.   
  3. import android.content.Context;  
  4. import android.os.Handler;  
  5. import android.os.ITestWslService;  
  6. import android.os.Looper;  
  7. import android.os.Message;  
  8. import android.os.Process;  
  9. import android.util.Log;  
  10.   
  11. public class TestWslService extends ITestWslService.Stub {  
  12.   private static final String TAG = "TestWslService";  
  13.   private TestWslWorkerThread mWorker;  
  14.   private TestWslWorkerHandler mHandler;  
  15.   private Context mContext;  
  16.   
  17.   public TestWslService(Context context) {  
  18.     super();  
  19.     mContext = context;  
  20.     mWorker = new TestWslWorkerThread("TestWslServiceWorker");  
  21.     mWorker.start();  
  22.     Log.i(TAG, "Spawned worker thread");  
  23.   }  
  24.   
  25.   public void setValue(int val)  
  26.   {  
  27.     Log.i(TAG, "setValue " + val);  
  28.     Message msg = Message.obtain();  
  29.     msg.what = TestWslWorkerHandler.MESSAGE_SET;  
  30.     msg.arg1 = val;  
  31.     mHandler.sendMessage(msg);  
  32.   }  
  33.   
  34.   private class TestWslWorkerThread extends Thread{  
  35.     public TestWslWorkerThread(String name) {  
  36.       super(name);  
  37.     }  
  38.   
  39.     public void run() {  
  40.       Looper.prepare();  
  41.       mHandler = new TestWslWorkerHandler();  
  42.       Looper.loop();  
  43.     }  
  44.   }  
  45.   
  46.   private class TestWslWorkerHandler extends Handler {  
  47.     private static final int MESSAGE_SET = 0;  
  48.   
  49.     @Override  
  50.     public void handleMessage(Message msg) {  
  51.       try {  
  52.         if (msg.what == MESSAGE_SET) {  
  53.           Log.i(TAG, "set message received: " + msg.arg1);  
  54.         }  
  55.       } catch (Exception e) {  
  56.         // Log, don't crash!  
  57.         Log.e(TAG, "Exception in TestWslWorkerHandler.handleMessage:", e);  
  58.       }  
  59.     }  
  60.   }  
  61. }  

4. 将该service增加到Systemserver中,SystemService.java的目录是frameworks/base/services/java/com/android/server/SystemServer.java,增加代码如下:


[html]  view plain copy
  1. ServiceManager.addService("testwsl", new TestWslService(context));  

5.新建一个TestWslManager类,用于管理TestWslService,
首先在/frameworks/base/core/java/下新建一个package,命名为android.testwsl;
然后在该目录下新建一个TestWslManager类,具体代码如下:



[html]  view plain copy
  1. package android.testwsl;  
  2.   
  3. import android.os.ITestWslService;  
  4. import android.os.RemoteException;  
  5. import android.util.Log;  
  6.   
  7. public class AnromCertManager {  
  8.         ITestWslService service;  
  9.          
  10.         public AnromCertManager(ITestWslService service) {  
  11.                 this.service = service;  
  12.         }  
  13.          
  14.         public void setValue(int val) {  
  15.                 try {  
  16.                              service.setValue(val);  
  17.                 } catch (RemoteException e) {  
  18.                              Log.d("anromwsl" , "setvalue fail");  
  19.                         e.printStackTrace();  
  20.                 }  
  21.         }  
  22. }  

6. 在ContextImpl中注册该service,ContextImpl.java的目录是/frameworks/base/core/java/android/app/ContextImpl.java,具体代码如下:


[java]  view plain copy
  1. registerService(TESTWSL_SERVICE, new ServiceFetcher() {  
  2.                 public Object getService(ContextImpl ctx) {  
  3.                         IBinder b = ServiceManager.getService(TESTWSL_SERVICE);  
  4.                         ITestWslService service = ITestWslService.Stub.asInterface(b);  
  5.                         return new TestWslManager(service);  
  6.                 }  
  7. });  
  8. SL_SERVICE 为TestWslService注册在SystemServer中的别名,在Context中定义  

7. 新建一个Android工程,测试TestWslService


[html]  view plain copy
  1. TestWslManager ad = null;        
  2. ad = (TestWslManager)getSystemService("testwsl");  
  3. 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、付费专栏及课程。

余额充值