添加service到SystemService: 添加硬件服务。
创建时间:2015年3月9日(星期一) 晚上11:07 | 分类:硬件驱动Android | 天气: 
修改时间:2015年3月10日(星期二) 中午11:37
<note_content>

.添加service到SystemService

测试的service类是InnerToolService,表示内置到framework的自定义服务,使用的aidl包括:

IInnerToolService  定义接口,InnerToolService实现该接口
IInnerToolCB.aidl  定义回调  不熟悉aidl的话可以先不加

1).添加需要的Service的java文件。

注意:包名也要一样。package com.android.server;然后找到SystemServer,修改如下在ServerThread的run方法里添加

//add innertool
try {              ServiceManager.addService("innertool", new InnerToolService(context));
} catch (Throwable e) {
}
//End 

注意"innertool"相当于service的标记,在使用getSystemService来获取时需要提供该标记。

2).frameworks\base\core\java\android\app\ContextImpl.java

这里主要是响应getSystemService,如果service未启动,则启动service。(与manager关联)

首先添加import语句//inner tool
            import com.android.innertool.IInnerToolService;//End

然后在内部类ServiceFetcher的static语句块里添加以下代码://add innertool registerService("innertool", new ServiceFetcher() {public Object getService(ContextImpl ctx) {IBinder b = ServiceManager.getService("innertool");IInnerToolService service = IInnerToolService.Stub.asInterface(b);Log.e("tool", "fetch innertool service = " + service);return  service;}});//End

  1. 其次在context/context.java中添加对应函数
3).aidl相关文件的编译
framework/base/Android.mk文件,在LOCAL_SRC_FILES下添加相关的aidl文件LOCAL_SRC_FILES += \innertool/java/com/android/innertool/IInnerToolService.aidl \innertool/java/com/android/innertool/IInnerToolCB.aidl

到这里基本就添加完成了,可能部分不同的平台或者项目会存在差异,大家需要细心。然后是对于远程service的调用

假设aidl定义的接口如下

interface IInnerToolService{void exec(String arg0,String arg1,IInnerToolCB arg2);
}

2.通过aidl调用远程service

上面定义了aidl文件,使用的包名是com.android.innertool,那我们本地应用也需要有这个包名下的aidl文件

即测试应用需要创建com.android.innertool这个包,并将IInnerToolService.aidl和IInnerToolCB.aidl文件放进去,这样会在gen/生成对应的java文件。

然后就可以使用该SystemService的接口了。

private IInnerToolService toolService2;
toolService2 = (IInnerToolService) getSystemService("innertool");
try {toolService2.exec("aaa", "bbb", new InnerToolCB());
} catch (RemoteException e1) {// TODO Auto-generated catch blocke1.printStackTrace();
}

这样基本就走通了简单的调用流程。

附上相应的代码

package com.android.server;import android.content.Context;
import android.os.RemoteException;
import android.util.Log;import com.android.innertool.IInnerToolCB;
import com.android.innertool.IInnerToolService;public class InnerToolService extends IInnerToolService.Stub{private Context mContext;public InnerToolService(Context context) {    mContext = context; }@Overridepublic void exec(String arg0, String arg1, IInnerToolCB arg2)throws RemoteException {// TODO Auto-generated method stubLog.v("InnerToolService", "exec,"+arg0+","+arg1+","+arg2);}
}
==========================================
注意: 如果在Android源码中添加了自定义的包、类、方法或者你修改了android源码中标识为“@hide”的方法、类,你需要这些内容对Application可见并且需要编译进sdk中的Document中的话,需要执行
      make update-api
==========================================

添加service到SystemService硬件服务相关推荐

  1. phpFpm加载php,php-fpm添加service服务的例子

    nginx通过FastCGI运行PHP比Apache包含PHP环境有明显的优势,最近有消息称,PHP5.4将很有可能把PHP-FPM补丁包含在内核里,nginx服务器平台上运行PHP将更加轻松,下面我 ...

  2. centos7重新加载服务的命令_Centos7 systemctl添加service服务参数说明

    Centos7可以通过systemctl执行服务命令,同时支持自定义service服务文件来进行一系列的标准执行. 常用命令 systemctl daemon-reload systemctl ena ...

  3. Android硬件服务框架实例之Vibrator(驱动到应用)

    转载于:http://www.cnblogs.com/skywang12345/p/3404808.html,内容有所修改,这篇vibrator源码是基于安卓7.1分析.      系列:安卓硬件访问 ...

  4. Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过<service>来声明.可以通过contect.startservice ...

  5. JMS : Java Message Service (Java消息服务)之一 [转]

    为什么80%的码农都做不了架构师?>>>    1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...

  6. Catalog Service - 解析微软微服务架构eShopOnContainers(三)

    上一篇我们说了Identity Service,因为其基于IdentityServer4开发的,所以知识点不是很多,今天我们来看下Catalog Service,今后的讲解都会把不同的.重点的拿出来讲 ...

  7. 后台系统可扩展性学习笔记(七)Service Discovery与微服务

    文章目录 应用层 微服务架构 服务注册查询 Service Discovery 客户端 Service Discovery DNS-SD DNS-based Service Discovery 服务端 ...

  8. Azure 应用服务、虚拟机、Service Fabric 和云服务的比较

    Azure 提供了几种托管网站的方式:Azure 应用服务.虚拟机.Service Fabric 和云服务. 本文可帮助你了解这几种方式,并针对 Web 应用程序做出正确的选择. Azure 应用服务 ...

  9. 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)

    #!/bin/bash #设置变量定义需要添加到防火墙规则的服务和端口号 #使用 firewall-cmd --get-services 可以查看 firewall 支持哪些服务 service=&q ...

最新文章

  1. 双边滤波算法的简易实现bilateralFilter
  2. 【C/C++】排序算法
  3. Python实训day12am【网络爬虫大作业简略解析:动态生成html页面、数据写入Excel】
  4. MySQL数据库:索引的实现原理
  5. [BUUCTF-pwn]——[ZJCTF 2019]EasyHeap
  6. cmd 出现The system cannot write to the specified device问题时如何解决
  7. JavaScript:new关键字的执行过程
  8. 【PAT乙】1069 微博转发抽奖 (20分) set
  9. 不同用户登陆模块的实现
  10. [转]如何在NIOS II中读写EPCS剩余空间
  11. mysql存储过程(通俗易懂)
  12. R语言notes(1)——行列处理
  13. 学习笔记2-了解unik的设计
  14. python自动生成采集规则_快速制作规则及获取规则提取器AP
  15. PyCharm打包可执行文件方法
  16. pytorch学习最全官网地址
  17. 计算机配置太低,安装Win10系统电脑配置太低怎么办
  18. 油管:The Truth About Lab-Grown Meat
  19. AcWing 1192. 奖金
  20. C语言extren关键字详解

热门文章

  1. 大数据可视化及发展趋势
  2. 在UWP 将BitmapImage转换为 WriteableBitmap
  3. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包
  4. PHP微信开发之获取access_token
  5. java中String对象和String变量
  6. paip. 提升性能---hibernate的缓存使用 总结
  7. 《The C Programming Language》(2nd Ed) Introduction 翻译
  8. cf relevent R package
  9. 踢毽也能治胃病,适当的运动带来健康,健康带来快乐
  10. 在if里赋值要注意=和==的优先级,==优先于=