如何在Android系统中添加系统服务(以PowerManager为例)
2018-01-02 11:50
393 查看
1.frameworks\base\core\java\android\os中添加一个PowerManager.java和IPowerManager.aidl文件,PowerManager构造函数传入一个实现aidl接口的实现类
2.frameworks\base\services\core\java\com\android\server中添加一个SystemService的实现类PowerManagerService,添加一个内部类实现IPowerManager.aidl,并把具体方法交给PowerManagerService实现,在onStart中用publishBinderService(Context.POWER_SERVICE, new BinderService())把aidl实现类注册
3.在SystemServer中启动PowerManagerService
4.frameworks\base\core\java\android\app\SystemServiceRegistry.java中注册PowerManager.java
registerService(Context.POWER_SERVICE, PowerManager.class,
new CachedServiceFetcher<PowerManager>() {
@Override
public PowerManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(Context.POWER_SERVICE);
IPowerManager service = IPowerManager.Stub.asInterface(b);
if (service == null) {
Log.wtf(TAG, "Failed to get power manager service.");
}
return new PowerManager(ctx.getOuterContext(),
service, ctx.mMainThread.getHandler());
}});
注意:PowerManagerService中具体实现最好加synchronized
注意2:如果启动过程发生crash,会导致不断重启。从安全角度来看,用PowerManagerService(类比)启动一个Service子类会更好。
2.frameworks\base\services\core\java\com\android\server中添加一个SystemService的实现类PowerManagerService,添加一个内部类实现IPowerManager.aidl,并把具体方法交给PowerManagerService实现,在onStart中用publishBinderService(Context.POWER_SERVICE, new BinderService())把aidl实现类注册
3.在SystemServer中启动PowerManagerService
4.frameworks\base\core\java\android\app\SystemServiceRegistry.java中注册PowerManager.java
registerService(Context.POWER_SERVICE, PowerManager.class,
new CachedServiceFetcher<PowerManager>() {
@Override
public PowerManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(Context.POWER_SERVICE);
IPowerManager service = IPowerManager.Stub.asInterface(b);
if (service == null) {
Log.wtf(TAG, "Failed to get power manager service.");
}
return new PowerManager(ctx.getOuterContext(),
service, ctx.mMainThread.getHandler());
}});
注意:PowerManagerService中具体实现最好加synchronized
注意2:如果启动过程发生crash,会导致不断重启。从安全角度来看,用PowerManagerService(类比)启动一个Service子类会更好。
相关文章推荐
- 如何在Android中添加系统服务
- Android 6.0 如何添加完整的系统服务(app-framework-kernel)
- Android 6.0 如何添加完整的系统服务(app-framework-kernel)
- 如何在Android中添加系统服务
- android上如何添加系统服务
- android—如何添加一个系统服务
- 如何在Android中添加系统服务
- 如何在android 4.0.3中添加系统服务
- android-如何在系统settings里添加设置选项
- 如何把mysql服务添加到windows系统服务当中去
- Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(一)
- [置顶] Android系统移植与调试之------->如何修改Android设备添加3G上网功能
- android-如何在系统settings里添加设置选项
- 【转】Android 添加系统服务
- Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
- 如何在android 系统 C/C++ 层中添加 log 信息
- android-如何在系统settings里添加设置选项
- Android 添加系统服务
- Android 添加系统服务
- Android 添加系统串口服务步骤