定义自定义系统服务接口(aidl)
添加Manager文件供应用层调用
添加aidl到编译脚本(./framework/base/Android.mk)
实现添加的服务(service.java)
注册到SystemServer(registerService())
一般系统服务的aidl文件都放在framework\base\core\java\android\os目录中。
/home/sunming/androidsource/android-6.0.1_r72/frameworks/base/core/java/android/app中添加aidl,manager文件
=====aidl文件========= package android.app; interface ISystemStatusManager{ String[] getSystemStatus(); } =======manager文件提供给app层使用=================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; } }===========在Context中添加常量==================SYSTEM_STATUS_SERVICE ===========SystemServiceRegistry 添加服务=======
//this is add by sunming registerService(Context.SYSTEM_STATUS_SERVICE,SystemStatusManager.class, new CachedServiceFetcher<SystemStatusManager>(){ @Override public SystemStatusManager createService(ContextImpl ctx) { IBinder b=ServiceManager.getService(Context.SYSTEM_STATUS_SERVICE); ISystemStatusManager service=ISystemStatusManager.Stub.asInterface(b); return new SystemStatusManager(ctx.getOuterContext(),service); } } ); ===================Android.mk文件中添加aidl文件位置============================LOCAL_SRC_FILES += \core/java/android/app/ISystemStatusManager.aidl \ =================添加service文件========================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; } }