定义自定义系统服务接口(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>(){@Overridepublic 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());}@Overridepublic 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;}
}
												

Android 源码中添加自定义服务并提供给上层使用相关推荐

  1. android源码使用方法,android源码中使用到的设计模式(创建型)

    1.单例模式 1.1定义 确保某个类只有一个实例,而且自行实例化并向整个系统提供者个实例. 1.2单例的形式 饿汉模式:第一次就加载,用空间换时间. public class SingleTon { ...

  2. android底层截图,Android源码中屏幕截图的实现

    Android手机一般都自带有手机屏幕截图的功能:在手机任何界面(当然手机要是开机点亮状态),通过按组合键,屏幕闪一下,然后咔嚓一声,截图的照片会保存到当前手机的图库中,真是一个不错的功能! 以我手头 ...

  3. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )

    文章目录 一.DexFile 构造函数 二.DexFile.openInMemoryDexFile 函数 三.Android 源码中查找 native 函数 一.DexFile 构造函数 上一篇博客 ...

  4. android 源码中的单例,Android源码中的一种单例实现

    单例模式的实现方式有懒汉,饿汉,双重校验锁,枚举,内部类等等,写法就不全部列举了.Android源码中有一个单例辅助类/frameworks/base/core/java/android/util/S ...

  5. Android源码中的FLAG为何使用16进制

    1.在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 比如View.java中的 /*** This view does not want keystr ...

  6. android单例模式代码,设计模式(一):Android 源码中的单例模式

    设计模式(一):Android 源码中的单例模式 2020-08-17 22:51 阅读数 57 <>什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的 ...

  7. android 静态工厂方法,Android 源码中的静态工厂方法

    我们知道工厂模式有三兄弟,通常我们说的工厂模式指的是工厂方法模式,它的应用频率最高.本篇博客分享的简单工厂模式是工厂方法模式的"小弟",确切的来讲它不属于设计模式,而是一种方法.此 ...

  8. 设计模式(一):Android 源码中的单例模式

    什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的就是在全局只生成一个类的实例. 什么场合用单例模式 应用中经常有多任务进行信息共享的需求,比如火车票售卖示例中,多 ...

  9. 视频直播源码中关于服务端直播开播推送实现

    在视频直播源码中直播app开播时需向客户推送开播消息通知用户,实现方式如下: 1.申请相应的推送服务三方,如下使用极光推送,获取相应的配置资料,并做好相应的配置 2.推送代码如下: /* 极光推送 * ...

最新文章

  1. 人类正在进入超级智能时代,论一种新超级智能的崛起
  2. select fd_set
  3. STM32开发 -- ADC详解
  4. 解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果
  5. java 反射 类名_java – 从反射中获取字段的类名
  6. 活力四射的Windows Embedded Standard 7
  7. 2,上传电影,udp,异常处理,socketserver
  8. linux内核数据结构实现--链表、队列和哈希
  9. Android 开发未来的出路何在? | 技术头条
  10. php数据库find(),db_find()
  11. 企业私有云之rabbitmq高可用
  12. HackerOne年度报告:安全众测推出四年,成果几何?
  13. allegro中10mil过孔_allegro阻抗隔层参考设置以及via copy操作
  14. android poi导出excel,解决java poi导出excel2003不能超过65536行的问题
  15. android无法格式化sd卡,当Android无法格式化SD卡时该怎么做 | MOS86
  16. Vue前端实战——外卖商家
  17. UOS启用wayland
  18. win10和win server 2016新的TCP功能介绍
  19. Daily Scrum Meeting 10.31
  20. 如何查看网页上的图片体积大小或容量大小?

热门文章

  1. 【毕业季征文】追光人,终将光芒万丈!
  2. Unable to load library ‘xxx‘: 找不到指定的模块。找不到指定的模块。 Can‘t obtain InputStream for win32-x86-64/xxx.dll
  3. Sublime text3 Ctags安装
  4. 风控模型A卡申请评分卡,toad包实例
  5. CCF认证考试——线性分类器
  6. c语言 mac windows,C语言获取windows系统mac列表
  7. 苹果电脑配置到底怎么样,为何说真懂电脑的不会选苹果?
  8. 【开篇有益】敢问路在何方,佛曰路就在脚下
  9. 面向对象分析与设计知识点总结
  10. POJ - 1990 (MooFest)