Android增加一个System Service

转自 CSDN博主「aiai373824745」
原文链接:https://blog.csdn.net/aiai373824745/article/details/7439896

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);
                        }
        });
// TESTWSL_SERVICE 为TestWslService注册在SystemServer中的别名,在Context中定义

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

        TestWslManager ad = null;      
        ad = (TestWslManager)getSystemService("testwsl");
        ad.setValue(7);


到这基本就OK了!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值