Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android下增加service和对应的AIDL

在Android中,应用访问service提供的接口都是通过AIDL(Android Interface Definition Language),可以理解为一种规范,甚至可以粗陋的理解为C语言里面的.h文件,如果你曾经是一名C语言开发者,而且只是使用的话。下面的例子是想增加获取cpu 频率的service及其对应的AIDL,其中并没有实际的读取频率和设置governor的操作,仅仅用于演示如何在framework中增加一个service和AIDL。1) 增加AIDL接口文件文件:frameworks/base/core/java/android/os/ICpuFreqService.aidlpackage android.os; import android.os.WorkSource; /** @hide */interface ICpuFreqService{   int  getCurGovernor();   int  getCurFrequency();}2) 在Android.mk中增加ICpuFreqService.aidl接口文件的编译选项文件:frameworks/base/Android.mkLOCAL_SRC_FILES += ……….core/java/android/os/ICpuFreqService.aidl……..3) 实现CpuFreqService.java文件:frameworks/base/services/java/com/android/server$ ls CpuFreqService.javapackage com.android.server; import android.os.ICpuFreqService;class CpuFreqService extendsICpuFreqService.Stub{   static int EnterTimes=0;   public int  getCurGovernor()    {           return0x11233;    }   public int  getCurFrequency()    {              EnterTimes++;              return (EnterTimes*50);    }}4) 在SystemService中注册service文件:frameworks/base/services/java/com/android/server/SystemServer.javaCpuFreqService cpufreq=null;………………Slog.i(TAG, "CpuFreq Manager");cpufreq = new CpuFreqService();ServiceManager.addService("cpufreq",cpufreq);5) 在APP中调用AIDL接口…………….import android.os.ServiceManager;import android.os.ICpuFreqService;   ……………...try {       ICpuFreqService cpuFreq= ICpuFreqService.Stub.asInterface(       ServiceManager.getService("cpufreq"));                  setSummaryText("baseband_version",Integer.toString(cpuFreq.getCurGovernor()));                Log.e("Status","Governor=" + Integer.toString(cpuFreq.getCurGovernor()));               Log.e("Status","Freq ="+ Integer.toString(cpuFreq.getCurFrequency()));            } catch (Exception e)      {        }