添加service到SystemService硬件服务
修改时间:2015年3月10日(星期二) 中午11:37
.添加service到SystemService
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
其次在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硬件服务相关推荐
- phpFpm加载php,php-fpm添加service服务的例子
nginx通过FastCGI运行PHP比Apache包含PHP环境有明显的优势,最近有消息称,PHP5.4将很有可能把PHP-FPM补丁包含在内核里,nginx服务器平台上运行PHP将更加轻松,下面我 ...
- centos7重新加载服务的命令_Centos7 systemctl添加service服务参数说明
Centos7可以通过systemctl执行服务命令,同时支持自定义service服务文件来进行一系列的标准执行. 常用命令 systemctl daemon-reload systemctl ena ...
- Android硬件服务框架实例之Vibrator(驱动到应用)
转载于:http://www.cnblogs.com/skywang12345/p/3404808.html,内容有所修改,这篇vibrator源码是基于安卓7.1分析. 系列:安卓硬件访问 ...
- Android Service学习之本地服务
Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过<service>来声明.可以通过contect.startservice ...
- JMS : Java Message Service (Java消息服务)之一 [转]
为什么80%的码农都做不了架构师?>>> 1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...
- Catalog Service - 解析微软微服务架构eShopOnContainers(三)
上一篇我们说了Identity Service,因为其基于IdentityServer4开发的,所以知识点不是很多,今天我们来看下Catalog Service,今后的讲解都会把不同的.重点的拿出来讲 ...
- 后台系统可扩展性学习笔记(七)Service Discovery与微服务
文章目录 应用层 微服务架构 服务注册查询 Service Discovery 客户端 Service Discovery DNS-SD DNS-based Service Discovery 服务端 ...
- Azure 应用服务、虚拟机、Service Fabric 和云服务的比较
Azure 提供了几种托管网站的方式:Azure 应用服务.虚拟机.Service Fabric 和云服务. 本文可帮助你了解这几种方式,并针对 Web 应用程序做出正确的选择. Azure 应用服务 ...
- 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
#!/bin/bash #设置变量定义需要添加到防火墙规则的服务和端口号 #使用 firewall-cmd --get-services 可以查看 firewall 支持哪些服务 service=&q ...
最新文章
- 双边滤波算法的简易实现bilateralFilter
- 【C/C++】排序算法
- Python实训day12am【网络爬虫大作业简略解析:动态生成html页面、数据写入Excel】
- MySQL数据库:索引的实现原理
- [BUUCTF-pwn]——[ZJCTF 2019]EasyHeap
- cmd 出现The system cannot write to the specified device问题时如何解决
- JavaScript:new关键字的执行过程
- 【PAT乙】1069 微博转发抽奖 (20分) set
- 不同用户登陆模块的实现
- [转]如何在NIOS II中读写EPCS剩余空间
- mysql存储过程(通俗易懂)
- R语言notes(1)——行列处理
- 学习笔记2-了解unik的设计
- python自动生成采集规则_快速制作规则及获取规则提取器AP
- PyCharm打包可执行文件方法
- pytorch学习最全官网地址
- 计算机配置太低,安装Win10系统电脑配置太低怎么办
- 油管:The Truth About Lab-Grown Meat
- AcWing 1192. 奖金
- C语言extren关键字详解
热门文章
- 大数据可视化及发展趋势
- 在UWP 将BitmapImage转换为 WriteableBitmap
- spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包
- PHP微信开发之获取access_token
- java中String对象和String变量
- paip. 提升性能---hibernate的缓存使用 总结
- 《The C Programming Language》(2nd Ed) Introduction 翻译
- cf relevent R package
- 踢毽也能治胃病,适当的运动带来健康,健康带来快乐
- 在if里赋值要注意=和==的优先级,==优先于=