android自定义一个服务,Android实现在ServiceManager中加入自定义服务的方法详解

本文详细介绍了如何在Android中创建并注册自定义服务到ServiceManager,包括创建AIDL接口、实现服务类、在开机时自动注册服务、创建管理类供客户端使用以及进行测试。此外,还提供了如何在Eclipse中使用隐藏API的步骤。
摘要由CSDN通过智能技术生成

本文实例讲述了Android实现在ServiceManager中加入自定义服务的方法。分享给大家供大家参考,具体如下:

当我们要使用android的系统服务时,一般都是使用Context.getSystemService方法。例如我们要获取AudioManager,我们可以:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

获取的服务,其实是在ServiceManager中注册的Binder服务,然后进行封装后,提供给用户。

可以看ContextImpl.java中的实现:

static {

......

// 将AudioManager加入SYSTEM_SERVICE_MAP中,调用getSystemService时,

// 就会从SYSTEM_SERVICE_MAP得到AudioManager

registerService(AUDIO_SERVICE, new ServiceFetcher() {

public Object createService(ContextImpl ctx) {

return new AudioManager(ctx);

}});

......

}

AudioManager是对IAudioService的封装,实际操作都是使用IAudioService进行的,看AudioManager中的代码:

private static IAudioService getService()

{

if (sService != null) {

return sService;

}

// 从ServiceManager中获取Binder

IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);

// 将Binder转化成IAudioService,方便调用

sService = IAudioService.Stub.asInterface(b);

return sService;

}

上面是android系统的使用方式。如果我们添加自己的服务,要如何做呢?

我们在eclipse中建3个测试工程:

1)MyServiceLib:这是个lib工程,需要在eclipse中勾选Is Library。后面的两个工程,都需要将MyServiceLib添加到Library中。

2) MyService: 用于在android开机时注册自定义服务进ServiceManager。因为ServiceManager被@hide隐藏了,所以要使用它需要自己手动添加sdk包,添加方式可参考在Eclipse中使用SDK中@hide函数的方法附加说明。另外,添加服务,需要System用户,所以manifest文件中需要加上android:sharedUserId=&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值