如何在Android源码中加入Java层系统服务。

如何在Android源码中加入Java层系统服务。

源码目录为framework/core/java/

1. 在android/app/目录下创建接口文件IServiceTest.aidl

package android.app;
oneway interface IServiceTest
{
	 void show();
}

2. 在Android.mk文件中的变量LOCAL_SRC_FILES中加入core/java/android/app/IServiceTest.aidl

如果要在sdk中发布这个服务就在变量aidl_files中加入一样的路径。

3. 通过aidl编译器编译IServiceTest.aidl,会生成一个IServiceTest.java文件。

4. 创建服务类ServiceTestSerice

class ServiceTestSerice extends IServiceTest.Stub{
       private static final String TAG = “ServiceTestSerice”;
       Context mContext;
       public ServiceTestSerice(Context context){
           mContext = context;
}
public void show() throws RemoteException {
    System.out.println(“My ServiceTestSerice”);
}
}

.5. 注册服务

       Java系统服务在ServerThread类的run()方法中生成并注册到android平台,生成ServiceTestSerice实例对象,通过ServiceManager的addService方法将服务注册到系统中。

try{
serviceTestSerice = new ServiceTestSerice(context);
ServiceManager.addService(Context.SERVICE_TEST, serviceTestSerice);
} catch (Throwable t) {

}   

ServiceTestSerice serviceTestSerice;
以上代码在ServerThread类的run()方法中。
在Context类中加入:
  public static final StringSERVICE_TEST = “servicetest”
  ServiceTestManager  sServiceTestManager;

6. 使用系統服务

       编写一个ServiceTestManager类,为包装类。

public class ServiceTestManager{
    private final IServiceTest mService;
    
    ServiceTestManager(IServiceTest service){
       mService =  service;
}

public void test(){
   try{
     mService. show()
   } catch (RemoteException ex){

   }
  }
}

7 提供应用层开发接口

在ContextImpl类中的getSystemService()方法中加入如下代码:
   else if (SERVICE_TEST.equals(name)){
        return getServiceTestManager();
   }
   private ServiceTestManager getServiceTestManager(){
       synchronized(sSync) {
          if (sServiceTestManager ==  null){
             IBinder b = ServiceManager.getService(SERVICE_TEST);
             IServiceTest service = IServiceTest.Stub.asInterface(b);
             sServiceTestManager = new ServiceTestManager(service);
          }
   }
  调用过程如下:
  ServiceTestManager manager= (ServiceTestManager) getSystemService(Context. SERVICE_TEST);
  manager.show();

8. 测试

   make

   make update-api 更新current.xml文件

   生成system.imz文件,放到<ANDROID_SDK>/platform/android-20/images/目录下,

   adb shell

   service list

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值