在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”进行整体编译



更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android字体
  4. android UI布局 layer-list
  5. 关于Android资源文件中出现百分号的问题
  6. android命令行打包、签名+自动打包器
  7. Android中得到布局文件对象三种方式
  8. Android(安卓)报错加入第三方库报错
  9. 〖Android〗/system/etc/media_codecs.xml

随机推荐

  1. Android中使用ViewPager+Fragment动态删
  2. Android 自定义SeekBar显示进度百分比
  3. android listview分割线粗细不一样
  4. 带确定和取消的
  5. android判断屏幕为横屏还是竖屏
  6. Android——使用Shape制作特殊形状的Butt
  7. Activity之间的相互调用与传递参数
  8. android BlueTooth蓝牙
  9. android:动态获取权限
  10. Android 从网络加载图片