以添加控制LED的服务为例子简述 android 系统服务的编写。
##分析
首先需要知道的是android 之所以能够提供系统服务,是因为进程间通信,系统服务一直在后台运行。当程序想使用这些服务的时候,只要申请使用就可以了。android使用自己的Binder实现了这种进程间通行。
我想实现一个控制LED的系统服务,但是不需要过度了解 Binder, 只需要在系统服务的框架中添加相应的代码就可以了。
##实现
###定义接口
aidl文件定义了服务端提供的接口
:::java //ILEDManager.aidl package android.app; interface ILEDManager { void setWifiLED(boolean flag); void setApLED(boolean flag); } 定义好好需要在编译文件添加文件。
:::java //Android.mk core/java/android/app/ILEDManager.aidl \ ###接口实现代码
定义了接口后,就需要实现服务端逻辑了。
:::java //LEDManagerService.java package com.android.server; import android.util.Slog; import android.os.IBinder; import android.os.Binder; import android.content.Context; import android.app.LEDManager; import android.app.ILEDManager; public class LEDManagerService extends ILEDManager.Stub{ private static final String TAG = "LEDManagerService"; private LightsService mLightsService; private Context mContext; private final LightsService.Light mWifiLight; private final LightsService.Light mApLight; public LEDManagerService(Context context, LightsService lights){ this.mContext = context; this.mLightsService = lights; mWifiLight = mLightsService.getLight(LightsService.LIGHT_ID_WIFI); mApLight = mLightsService.getLight(LightsService.LIGHT_ID_AP); } public void setWifiLED(boolean flag){ if(mWifiLight != null){ if(flag){ mWifiLight.setColor(1); }else{ mWifiLight.turnOff(); } } } public void setApLED(boolean flag){ if(mApLight != null){ if(flag){ mApLight.setColor(1); }else{ mApLight.turnOff(); } } } } ###加载
...