您的位置:首页 > 移动开发 > Android开发

android 添加ETH pppoe tr069服务

2016-05-26 17:10 477 查看
这三个服务是以Java端的服务方式启动的,对上层代理端是xxxManager,由aidl来和本地端xxxService来通信。

所以也就是说,他们的启动方式是在system_server中来addService。

添加服务:

在systemServer.java中,initAndLoop中回去add这些service,在ConnectivityService中,可以看到这些网络相关的服务被添加进去。

获取服务:

使用getSystemSevice来获取对应的代理端manger

EthernetManager mEM

= (EthernetManager)mContext.getSystemService(Context.ETH_SERVICE);

想通过Context.getSystemService(name)获取Manager实例,如上面所示,还必须要做另一个事情,就是在ContextImpl类初始化的时候,将Manager实例注册。

registerService(ETH_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(ETH_SERVICE);
IEthernetManager service = IEthernetManager.Stub.asInterface(b);
return new EthernetManager(service, ctx.mMainThread.getHandler());
}});
registerService(PPPOE_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(PPPOE_SERVICE);
IPppoeManager service = IPppoeManager.Stub.asInterface(b);
return new PppoeManager(service, ctx.mMainThread.getHandler());
}});


如果不这样注册的话,想要使用就不能从context中来获取服务,而是需要从serviceManager中用get方法来获取。这种的缺点是apk的编译必须要放在源码编译,因为在Eclipse等编译的话是没有serviceManager包可以用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: