AIDL这里就不加累述它的概念定义等等,免得长篇大幅。下面介绍的是简单的一次使用AIDL成功与service通信的一个例子:

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的惠山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1.在项目包下新建一个IInfo.aidl,并在其中添加你要调用的方法,格式和java中接口一样。package com.android.server;
- interface IInfo {
 - boolean start();
 - void stop();
 - void locate(int x, int y);
 - void move(int dx, int dy);
 - void getLocation(inout int[] p);//参数为数组的话,可以加上inout,不然会报错
 - void setTimeout(int t);
 - int getTimeout();
 - void setBitmap(inout byte[] bmp, int width, int height);}
 
正确写好之后,eclipse的adt会自动在gen目录下生成一个IInfo.java文件
2.新建一个CursorService.java类,继承IInfo.stub,如下:
- package com.android.server;
 - public class CursorService extends ICursorInfo.Stub{
 - final boolean hasService;
 - public CursorService() {
 - hasService = initializeJNI();
 - }
 - public synchronized boolean start() {
 - if (hasService)
 - return start0();
 - return false;
 - }
 - public synchronized void stop() {
 - if (hasService)
 - stop0();
 - }
 - public synchronized void locate(int x, int y) {
 - if (hasService)
 - locate0(x, y);
 - }
 - public synchronized void move(int dx, int dy) {
 - if (hasService)
 - move0(dx, dy);
 - }
 - public synchronized void getLocation(int[] p) {
 - if (p == null)
 - throw new NullPointerException("p is null");
 - if (p.length < 2)
 - throw new IllegalArgumentException("p.len must >= 2");
 - if (hasService)
 - getPosition0(p);
 - }
 - public synchronized void setTimeout(int t) {
 - if (hasService)
 - setTimeout0(t);
 - }
 - public synchronized int getTimeout() {
 - if (hasService)
 - return getTimeout0();
 - return -1;
 - }
 - public void setBitmap(byte[] bmp, int width, int height) {
 - if(bmp == null)
 - throw new NullPointerException("bmp is null");
 - if(width < 0 || height < 0)
 - throw new IllegalArgumentException("width < 0 || height < 0");
 - if(width * height > bmp.length)
 - throw new IndexOutOfBoundsException("bmp less than width*height");
 - setBitmap0(bmp,width,height);
 - }
 
在其中实现你aAIDL中的方法
3. 新建一个Manager类,在其中构造一个内部服务连接类,实现ServiceConnection接口:
- public class Manager {
 - private static final String TAG = "Manager";
 - private IInfo iCurSer;
 - private Manager(){
 - }
 - public Manager(Context ctx){
 - this.context = ctx;
 - new Manager();
 - }
 - /**这里就可以与service正常通信,调用service中的方法**/
 - public void startService(){
 - Intent intent=new Intent("com.android.server.CursorService");
 - context.bindService(intent,new CursorServiceConnection(),
 - Service.BIND_AUTO_CREATE);
 - }
 - /**
 - * 实现ServiceConnection接口
 - * */
 - public final class CursorServiceConnection implements ServiceConnection{
 - // 和CursorService绑定时系统回调这个方法
 - @Override
 - public void onServiceConnected(ComponentName name, IBinder service) {
 - // 此处不能使用强制转换, 应该调用Stub类的静态方法获得CursorService接口的实例对象
 - iCurSer=ICursorInfo.Stub.asInterface(service);
 - }
 - //解除和CursorService的绑定时系统回调这个方法
 - @Override
 - public void onServiceDisconnected(ComponentName name) {
 - iCurSer=null;
 - }
 - }
 - }
 
Android中AIDL的简单使用就mark到这吧,希望对刚刚学Android的开发者能有些帮助。
                文章名称:Android中AIDL的简单使用
                
                分享网址:http://www.csdahua.cn/qtweb/news40/519890.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网