[android]Framework新增系统服务
在android源码中增加一项系统服务,如在android.app包下增加DevInfoManager.java,按如下进行处理:
1、在frameworks/base/core/java/android/app/目录下增加DevInfoManager.java及IDevInfoManager.aidl文件
DevInfoManager.java如下:
package android.app;import android.os.Handler;import android.os.RemoteException;import android.util.Log;public class DevInfoManager{ public static final String TAG = "DevInfoManager"; IDevInfoManager mService; Handler mHandler; public DevInfoManager(IDevInfoManager service, Handler handler) { mService = service; mHandler = handler; } public String getValue(String name){ try { return mService.getValue(name); } catch (RemoteException e) { Log.e(TAG, "[getValue] RemoteException"); } return null; } public int update(String name, String value, int attribute) { try { return mService.update(name, value, attribute); } catch (RemoteException e) { Log.e(TAG, "[update] RemoteException"); } return -1; }}
IDevInfoManager.aidl文件如下:
package android.app;interface IDevInfoManager{ String getValue(String name); int update(String name, String value, int attribute);}
2、添加相应的Service类,在frameworks/base/services/java/com/android/server下增加DevInfoService.java文件
DevInfoService.java文件如下:
package com.android.server;import android.app.IDevInfoManager;import android.util.Log;import android.content.Context;public class DevInfoService extends IDevInfoManager.Stub{ private static final String TAG = "DevInfoManagerService"; private Context mContext; public DevInfoService(Context context){ mContext = context; } public String getValue(String name) { Log.d(TAG,"[getValue] name : "+name); return name; } public int update(String name, String value, int attribute) { Log.d(TAG,"[update] name : "+name +", value : "+value+", attribute : "+attribute); return 0; }}
3、在SystemServer中生成该Service并添加到ServiceManager中
frameworks/base/services/java/com/android/server/SystemServer.java文件:
// add DevInfoServicetry { Slog.i(TAG, "DevInfoManager Service"); devInfo = new DevInfoService(context); ServiceManager.addService(Context.DEVINFO_SERVICE, devInfo);} catch (Throwable e) { reportWtf("starting devInfo Service", e);}// end
4、在frameworks/base/core/java/android/app/ContextImpl.java中增加service注册,如下:
registerService(DEVINFO_SERVICE, new ServiceFetcher() { public Object createService(ContextImpl ctx) { IBinder b = ServiceManager.getService(DEVINFO_SERVICE); IDevInfoManager service = IDevInfoManager.Stub.asInterface(b); return new DevInfoManager(service, ctx.mMainThread.getHandler()); }});
5、在frameworks/base/core/java/android/content/Context.java中增加Service名称定义:
/** * Use with {@link #getSystemService} to retrieve a {@link * android.app.DevInfoManager} for handling management of * device information access. * * @see #getSystemService * @see android.app.DevInfoManager */public static final String DEVINFO_SERVICE = "devinfo";
6、在frameworks/base/Android.mk文件中的LOCAL_SRC_FILES增加aidl的声明:
@@ -112,6 +112,7 @@ LOCAL_SRC_FILES += \
core/java/android/app/backup/IFullBackupRestoreObserver.aidl \
core/java/android/app/backup/IRestoreObserver.aidl \
core/java/android/app/backup/IRestoreSession.aidl \
+ core/java/android/app/IDevInfoManager.aidl \
core/java/android/bluetooth/IBluetooth.aidl \
core/java/android/bluetooth/IBluetoothA2dp.aidl \
7、进行编译,因为framework有变更,需要先update-api,在源码根目录下执行“make update-api”进行更新,完成后“make -j16”进行整体编译
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- android字体
- android UI布局 layer-list
- 关于Android资源文件中出现百分号的问题
- android命令行打包、签名+自动打包器
- Android中得到布局文件对象三种方式
- Android(安卓)报错加入第三方库报错
- 〖Android〗/system/etc/media_codecs.xml