• 添加系统服务需要添加aidl,service,manager文件,需要修改SystemServer,Context,ContextImpl
  • 下面举例进行说明,主要添加一个服务,用于获取系统时间和版本号


1.在frameworks/base/core/java/android/app/下添加aidl文件

frameworks/base/core/java/android/app/ISystemStatusManager.aidl
   
package android.app;interface ISystemStatusManager{    String[] getSystemStatus();}


2.修改frameworks/base/Android.mk文件,将aidl加到该文件中,这样才可以被编译到,否则编译不过

将core/java/android/app/ISystemStatusManager.aidl \加到LOCAL_SRC_FILES后面


3.在frameworks/base/services/core/java/com/android/server/下添加service文件

frameworks/base/services/core/java/com/android/server/SystemStatusManagerService.java
   
package com.android.server;import android.app.ISystemStatusManager;import android.content.Context;import android.os.Build;import android.util.Slog;import java.text.SimpleDateFormat;import java.util.Date;public class SystemStatusManagerService extends ISystemStatusManager.Stub {    private Context mContext;    public SystemStatusManagerService(Context context) {        mContext = context;        Slog.d("SystemStatus", "Date:" + getDateTime() + "\nVersion:" + getVersion());    }    @Override    public String[] getSystemStatus() {        String[] infos = new String[2];        infos[0] = "Date:" + getDateTime();        infos[1] = "Version:" + getVersion();        return infos;    }    private String getDateTime() {        SimpleDateFormat format = new SimpleDateFormat("yyyy-DD-mm HH:mm:s");        Date date = new Date(System.currentTimeMillis());        return format.format(date);    }    private String getVersion() {        return Build.DISPLAY;    }}


4.在frameworks/base/core/java/android/app/下添加manager

frameworks/base/core/java/android/app/SystemStatusManager.java
   
package android.app;import android.content.Context;import android.os.RemoteException;import android.util.Slog;public class SystemStatusManager {    Context mContext;    ISystemStatusManager mService;    public SystemStatusManager(Context context, ISystemStatusManager service) {        mContext = context;        mService = service;    }    public String[] getSystemStatus() {        if (mService != null) {            try {                return mService.getSystemStatus();            } catch (RemoteException e) {                Slog.e("SystemStatus", "RemoteException " + e);                return null;            }        }        return null;    }}

5.在frameworks/base/core/java/android/content/Context.java中添加service名称定义

public static final String SYSTEM_STATUS_SERVICE = "system_status_service";


6.在frameworks/base/services/java/com/android/server/SystemServer.java中添加服务

  • 在startOtherServices()方法中添加如下代码
   
try {    ServiceManager.addService(Context.SYSTEM_STATUS_SERVICE, new SystemStatusManagerService(context));} catch (Throwable e) {    Slog.e(TAG, "Failure starting System Status Service ", e);}


7.在frameworks/base/core/java/android/app/ContextImpl.java中注册服务

  • 在static {}中添加如下代码
   
registerService(SYSTEM_STATUS_SERVICE, new ServiceFetcher() {    public Object createService(ContextImpl ctx) {        IBinder b = ServiceManager.getService(SYSTEM_STATUS_SERVICE);        return new SystemStatusManager(ctx, ISystemStatusManager.Stub.asInterface(b));    }});


8.编译framework.jar和services.jar,push到手机,重启手机

  • 重启手机后就会输出如下log:
D/SystemStatus(  910): Date:2017-01-00 00:00:13D/SystemStatus(  910): Version:xxx


9.如果系统app需要使用该service,可以通过如下方式调用

   
SystemStatusManager mManager = (SystemStatusManager) getSystemService(Context.SYSTEM_STATUS_SERVICE);try {    String[] infos = mManager.getSystemStatus();    Log.i("SystemStatus", "SystemStatus Date:" + infos[0] + "\nVersion:" + infos[1]);} catch (Exception e) {    e.printStackTrace();}

更多相关文章

  1. Android简单自定义圆形和水平ProgressBar
  2. android通过chmod命令实现文件权限修改
  3. Android高手进阶教程(七)之----Android(安卓)中Preferences的使
  4. Android程序结构解析
  5. Android培训班(48)
  6. Android(安卓)APP使用自定义字体实现方法
  7. Android(安卓)动画系列一:Drawable Animation
  8. 第一个android应用程序
  9. android apk获得系统权限

随机推荐

  1. Known Free Software Android(安卓)Appli
  2. Android通知Notification
  3. Android中Parcelable接口用法
  4. android 判断service是否开启
  5. AndroidManifest.xml配置文件选项详解
  6. Android(安卓)Activity实现切换动画的两
  7. android MediaRecorder录音
  8. android发送json并解析返回json
  9. android Dialog中SeekBar的使用方法
  10. Android(安卓)vlc 简单使用