在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.aidl
package android.os;
import android.os.WorkSource;
/** @hide */
interface ICpuFreqService
{
int getCurGovernor();
int getCurFrequency();
}
2) 在Android.mk中增加ICpuFreqService.aidl接口文件的编译选项
文件:frameworks/base/Android.mk
LOCAL_SRC_FILES += \
……….
core/java/android/os/ICpuFreqService.aidl\
……..
3) 实现CpuFreqService.java
文件:frameworks/base/services/java/com/android/server$ ls CpuFreqService.java
package 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.java
CpuFreqService 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)
{
}
分享到:
相关推荐
和博客文章http://blog.163.com/zhou_411424/blog/static/197362156201241541451/...对应改编的例子,实现了在一个APP1中通过AIDL远程调用另一个APP2的Service的函数,即使APP2没有被启动过! 均在eclipse编译运行通过。
Android中2个进程无法直接通信,必须通过Android系统底层间接通信,而跨进程通信有4种方式,分别对应4大组件,其中Service对应的就叫AIDL,即Android Interface Defined Language安卓接口定义语言。这个是一个简单的...
①Android Interface definition language(aidl,android接口定义语言),其目的实现跨进程的调用。进程是程序在os中执行的载体,一个程序对应一个进程,不同进程就是指不同程序,aidl实现不同程序之间的调用。 ②...
这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨进程调用其他应用程序的Activity;Content Provider可以跨进程访问其他应用程序中的数据...
作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...
本书是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。本书从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层...
4.2.2 Measure Spec和Layout Params的对应关系 / 178 4.3 View的工作流程 / 183 4.3.1 measure过程 / 183 4.3.2 layout过程 / 193 4.3.3 draw过程 / 197 4.4 自定义View / 199 4.4.1 自定义View的分类 ...
目录 第1章 Activity的生命周期和启动模式 / 1 1.1 Activity的生命周期全面分析 / 1 1.1.1 典型情况下的生命周期分析 / 2 1.1.2 异常情况下的生命周期分析 / 8 1.2 Activity的启动模式 / 16 1.2.1 Activity的...
邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的 Android企业,负责Framework的开发和...
这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨进程调用其他应用程序的Activity;Content Provider可以跨进程访问其他应用程序中的数据...
1、Service的种类 按运行地点分类: 类别 区别 优点 缺点 应用 ... 服务为独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。由于是独立的进程,因此在Activit
4)在/frameworks/base目录,打开Android.mk文件,修改LOCAL_SRC_FILES变量的值,增加 core/java/android/hardware/IIrdaManager.aidl \ 两个接口文件。 5)在 frameworks/base/api/current.txt中添加: ===========...