[android]Framework新增系统服务

分类: android   638人阅读  评论(0)  收藏  举报

在android源码中增加一项系统服务,如在android.app包下增加DevInfoManager.java,按如下进行处理:

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

DevInfoManager.java如下:

[java]  view plain copy
  1. package android.app;  
  2. import android.os.Handler;  
  3. import android.os.RemoteException;  
  4. import android.util.Log;  
  5. public class DevInfoManager  
  6. {  
  7.         public static final String TAG = "DevInfoManager";  
  8.         IDevInfoManager mService;  
  9.         Handler mHandler;  
  10.   
  11.         public DevInfoManager(IDevInfoManager service, Handler handler) {  
  12.                 mService = service;  
  13.                 mHandler = handler;  
  14.         }  
  15.   
  16.         public String getValue(String name){  
  17.             try {  
  18.                 return mService.getValue(name);  
  19.             } catch (RemoteException e) {  
  20.                 Log.e(TAG, "[getValue] RemoteException");  
  21.             }  
  22.             return null;  
  23.         }  
  24.   
  25.         public int update(String name, String value, int attribute) {  
  26.             try {  
  27.                 return mService.update(name, value, attribute);  
  28.             } catch (RemoteException e) {  
  29.                 Log.e(TAG, "[update] RemoteException");  
  30.             }  
  31.             return -1;  
  32.         }  
  33. }  

IDevInfoManager.aidl文件如下:

[java]  view plain copy
  1. package android.app;  
  2.   
  3. interface IDevInfoManager  
  4. {  
  5.     String getValue(String name);  
  6.     int update(String name, String value, int attribute);  
  7. }  

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

DevInfoService.java文件如下:

[java]  view plain copy
  1. package com.android.server;  
  2.   
  3. import android.app.IDevInfoManager;  
  4. import android.util.Log;  
  5. import android.content.Context;  
  6. public class DevInfoService extends IDevInfoManager.Stub  
  7. {  
  8.     private static final String TAG = "DevInfoManagerService";  
  9.     private Context mContext;  
  10.     public DevInfoService(Context context){  
  11.         mContext = context;  
  12.     }  
  13.   
  14.     public String getValue(String name) {  
  15.         Log.d(TAG,"[getValue] name : "+name);  
  16.         return name;  
  17.     }  
  18.   
  19.     public int update(String name, String value, int attribute) {  
  20.         Log.d(TAG,"[update] name : "+name +", value : "+value+", attribute : "+attribute);  
  21.         return 0;  
  22.     }  
  23. }  

3、在SystemServer中生成该Service并添加到ServiceManager

frameworks/base/services/java/com/android/server/SystemServer.java文件:

[java]  view plain copy
  1. // add DevInfoService  
  2. try {  
  3.     Slog.i(TAG, "DevInfoManager Service");  
  4.     devInfo =  new DevInfoService(context);  
  5.     ServiceManager.addService(Context.DEVINFO_SERVICE, devInfo);  
  6. catch (Throwable e) {  
  7.     reportWtf("starting devInfo Service", e);  
  8. }  
  9. // end  

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

[java]  view plain copy
  1. registerService(DEVINFO_SERVICE, new ServiceFetcher() {  
  2.         public Object createService(ContextImpl ctx) {  
  3.                 IBinder b = ServiceManager.getService(DEVINFO_SERVICE);  
  4.                 IDevInfoManager service = IDevInfoManager.Stub.asInterface(b);  
  5.                 return new DevInfoManager(service, ctx.mMainThread.getHandler());  
  6.         }  
  7. });  

5、在frameworks/base/core/java/android/content/Context.java中增加Service名称定义:

[java]  view plain copy
  1. /** 
  2.  * Use with {@link #getSystemService} to retrieve a {@link 
  3.  * android.app.DevInfoManager} for handling management of 
  4.  * device information access. 
  5.  * 
  6.  * @see #getSystemService 
  7.  * @see android.app.DevInfoManager 
  8.  */  
  9. 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. android 8.1.0 添加系统service
  2. Android关于SD卡的读写操作及固定图片大小
  3. java引入Android(安卓)NinePatch技术的意义
  4. android 使用xml selector设置按钮点击效果图片
  5. Unbuntu下Android(安卓)studio报Unable to recreate missing deb
  6. Mac 10.12 快速下载 Android(安卓)源码
  7. Android(安卓)在xml布局配置文件中给Button按钮添加事件
  8. android ctl属性的实现过程
  9. cocos2d-x编译到android平台后,增加返回键和菜单键的支持

随机推荐

  1. 爬取3万景点,分析十一哪里人从众从人?
  2. 不使用 if-elif 语句,如何优雅地判断某个
  3. Python 3.9 性能优化:更快的 list()、dict
  4. Python小技巧:如何批量更新已安装的库?
  5. 大学历经几十个落地项目,小鹿教科书式经验
  6. 扫盲篇:实现一个简易的 webpack!
  7. Python 为什么不支持 i++ 自增语法,不提供
  8. “三本”大学,小鹿春秋招误入的坑!
  9. 一篇文章掌握 Python 内置 zip() 的全部
  10. 我的“三本”大学生涯到此结束!