Android 源码中添加自定义服务并提供给上层使用
16lz
2021-01-23
定义自定义系统服务接口(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 sunmingregisterService(Context.SYSTEM_STATUS_SERVICE,SystemStatusManager.class, new CachedServiceFetcher(){ @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; }}
更多相关文章
- 使用SAX或者DOM或者pull解析XML文件
- Android读取文件方法总结
- Android使用PULL解析和生成XML文件
- H5案例分享:使用JS判断客户端、浏览器、操作系统类型
- android中svg文件的使用
- android资源文件之:shape详解
- Android Debug keystore系统位置