由于项目需求,需要在系统中新加一项系统服务DevInfoManager,特作如下记录:

1、在frameworks/base/core/java/android/app/目录下增加DevInfoManager.java及DevInfoManagerImpl.java文件

DevInfoManager.java

/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package android.app;import android.app.ActivityManager.RunningAppProcessInfo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.RemoteException;import android.util.Log;import java.util.Properties;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * {@hide} */public abstract interface DevInfoManager {/** @hide*/    public static final String DATA_SERVER = "data";          /** @hide*/public static final int Default_Attribute = 0;      /** @hide*/public String getValue(String name);/** @hide*/public int update(String name, String value, int attribute) ;}

DevInfoManagerImpl.java

/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package android.app;import android.app.ActivityManager.RunningAppProcessInfo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.RemoteException;import android.os.Binder;import android.util.Log;import java.util.Properties;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.List;/** * {@hide} */ public class DevInfoManagerImpl implements DevInfoManager{/** @hide*/    public static final String DATA_SERVER = "data";      /** @hide*/public static final int Default_Attribute = 0;/** @hide*/private static final String LOG_TAG = "DevInfoManager";    /**     * Version number must be incremented when table structure is changed.     * @hide     */    private static final int DEVINFO_MANAGER_VERSION = 1; /** @hide*/private final Context mContext;private IDevInfoManager mService;    @Override    /** @hide*/protected void finalize() throws Throwable {super.finalize();}    /** @hide*/public DevInfoManagerImp(Context context,IDevInfoManager service) {        mContext = context;        mService = service;}    /** @hide*/public String getValue(String name){String strVal = "";try {strVal = mService.getValue(name);if(null == strVal) {strVal = "";}} catch (RemoteException e) {Log.e(LOG_TAG, "[getValue] RemoteException "+e.getMessage());strVal = "";}Log.d(LOG_TAG, String.format("getValue name:%s value:%s", name, strVal));return strVal;}/** @hide*/public int update(String name, String value, int attribute) {Log.d(LOG_TAG, String.format("update name:%s value:%s attribute:%d",name, value,             attribute));int iRet = 0;try {    iRet = mService.update(name,value,attribute);} catch (RemoteException e) {Log.e(LOG_TAG, "[update] RemoteException "+e.getMessage());iRet = -1;}Log.d(LOG_TAG, String.format("update name:%s iRet:%d", name, iRet));return iRet;}}

IDevInfoManager.aidl

package android.app;/** * {@hide} */interface IDevInfoManager {    String getValue(String name);    int update(String name, String value, int attribute);}

2、添加相应的Service类,在frameworks/base/services/java/com/android/server下增加DevInfoManagerService.java文件

package com.android.server;import android.util.Log;import android.app.IDevInfoManager;import android.content.Context;public class DevInfoManagerService extends IDevInfoManager.Stub {    private static final String LOG_TAG = "DevInfoManagerService";    private final Context mContext;    public DevInfoManagerService(Context Context){        mContext = Context;    }     public String getValue(String name) {        return null;    }    public int update(String name,String value, int attribute) {                                                                                                                                             return 0;    }}

3、在frameworks/base/services/java/com/android/server/SystemServer.java文件中生成该Service并添加到ServiceManager中

Slog.i(TAG, " DevInfoManager Service");dmService = new DevInfoManagerService(context);ServiceManager.addService("data", dmService);Slog.i(TAG, "System add DevInfoManager Services");

4、在frameworks/base/core/java/android/app/ContextImpl.java中增加service注册

registerService("data", new ServiceFetcher() {    public Object createService(ContextImpl ctx) {        IBinder b = ServiceManager.getService("data");        IDevInfoManager service = IDevInfoManager.Stub.asInterface(b);        return new DevInfoManagerImp(ctx, service);    }});

5、在frameworks/base/Android.mk文件中的LOCAL_SRC_FILES增加aidl的声明

LOCAL_SRC_FILES += \    core/java/android/content/EventLogTags.logtags \    core/java/android/speech/tts/EventLogTags.logtags \    core/java/android/webkit/EventLogTags.logtags \    core/java/android/app/IDevInfoManager.aidl \

6、编译之前先执行make update-api

7、使用

import android.app.DevInfoManager;DevInfoManager devInfoManager = (DevInfoManager)             context.getSystemService(DevInfoManager.DATA_SERVICE);devInfoManager.getValue(key);devInfoManager.update(key, value, attr);

 

更多相关文章

  1. android I/DEBUG堆栈信息
  2. 如何Android项目变成两个独立的项目,将build.gradle文件中applica
  3. Android(安卓)平铺背景图片
  4. android开发数据储存的路径示例
  5. Android(安卓)Studio build dex jar
  6. Android离线语音识别demo调试(Ubuntu12.04)
  7. android 将Json数据动态的添加到String[]数组当中
  8. react-native android 打包
  9. android eclipse debug 调试 Source not found

随机推荐

  1. 面试造火箭要初级面高级,Android开发两年,
  2. 进度圈的显示
  3. Android(安卓)Handler机制简单分析
  4. [Android(安卓)分享]GitHub Android(安卓
  5. Android(安卓)Graphics专题(1)--- Canvas基
  6. Android如何完全调试framework层代码
  7. Android进程的内存管理分析
  8. Android(安卓)API Guides---App Install
  9. android 图片占用进程的内存算法
  10. Android(安卓)Gradle 插件