博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android studio 使用 aidl(一)基础用法
阅读量:5334 次
发布时间:2019-06-15

本文共 3299 字,大约阅读时间需要 10 分钟。

      最近公司需要开发一个项目用的到aidl,之前研究过eclipse版本的,但是好久了一直没用,现在需要捡起来,但是现在都用android studio了,所以查了下资料 都不是很全,我在这里总结一下,方便后续忘了在用到。

 

第一步:通过as创建一个aidl文件,在app右键,如下图:

 

输入自己想要的名字,别的都默认,点击Finish 我这里的名字叫 PayAidlInterface 创建好如下:

 

在看看 PayAidlInterface.aidl  里面怎么写的,其实就一个计算的方法 客户端传2个int类型的值,服务端计算和

// PayAidlInterface.aidlpackage com.txy.umpay.aidl;// Declare any non-default types here with import statementsinterface PayAidlInterface {    /**     * Demonstrates some basic types that you can use as parameters     * and return values in AIDL.     */    int calculation(int anInt, int bnInt);}

 

第二步: PayAidlInterface.aidl  编写完成之后 需要Build-->Make Module app,生成相应的java文件,如下图:

 

在来看看生成的java文件的位置:

 

 

第三步:接下来,就该完成我们的MAIDLService逻辑部分了,MAIDLService.java代码如下:

先说下我遇到的坑,我是通过as右键创建的service 他自动会加上下面2个属性 就会导致客户端调用不起来,所以记得一定要删除

android:enabled="false"

android:exported="false"、

public class MAIDLService extends Service {    private void Log(String str) {        Log.e("123", "----------" + str + "----------");    }    public void onCreate() {        Log("service created");    }    public void onStart(Intent intent, int startId) {        Log("service started id = " + startId);    }    public IBinder onBind(Intent t) {        Log("service on bind");        return mBinder;    }    public void onDestroy() {        Log("service on destroy");        super.onDestroy();    }    public boolean onUnbind(Intent intent) {        Log("service on unbind");        return super.onUnbind(intent);    }    public void onRebind(Intent intent) {        Log("service on rebind");        super.onRebind(intent);    }    PayAidlInterface.Stub mBinder = new PayAidlInterface.Stub() {        @Override        public int calculation(int anInt, int bnInt) throws RemoteException {            Log(anInt + "--" + bnInt);            return 1;        }    };}

在来看下AndroidManifest.xml中MAIDLService 的配置:action是客户端调用用到的

 

服务端就已经完成了。接下来我们来看一下客户端的:

同样可以需要可服务端一样创建aidl文件

 

其实和服务端是一样的,把服务端的 PayAidlInterface.aidl 文件复制过来 再次执行 Build-->Make Module app

在来看下客户端怎么调用的

第一步先创建一个ServiceConnection 对象:

private ServiceConnection mServiceConnection = new ServiceConnection() {            @Override            public void onServiceDisconnected(ComponentName arg0) {                Log.e("123", "onServiceDisconnected:" + arg0.getPackageName());            }            @Override            public void onServiceConnected(ComponentName name, IBinder binder) {                Log.e("123", "onServiceConnected:" + name.getPackageName());                // 获取远程Service的onBinder方法返回的对象代理                service = PayAidlInterface.Stub.asInterface(binder);            }        };

 

第二步绑定:

//使用意图对象绑定开启服务Intent intent = new Intent();//在5.0及以上版本必须要加上这个intent.setPackage("com.txy.umpay.aidl");intent.setAction("com.txy.umpay.aidl.MAIDLService");//这个是上面service的actionbindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);

 

第三步调用:

if(service != null){     int calculation = service.calculation(1, 2);     text.setText("calculation:"+calculation); }

 

第四部不用的时候解除绑定:

@Override    protected void onDestroy () {        super.onDestroy();        if (mServiceConnection != null) {            unbindService(mServiceConnection);        }    }

 

下一篇文章:

转载于:https://www.cnblogs.com/androidxiaoyang/p/5917570.html

你可能感兴趣的文章
lr参数化取值规则总结
查看>>
Unsupported major.minor version 51.0
查看>>
ios学习:文件简单读写
查看>>
最近有些堕落了~
查看>>
Entity Framework 6 编译出错的问题(VS2012)
查看>>
Java多线程-新特性-线程池
查看>>
javascript中onSubmit="return xxx()"的问题
查看>>
Fiddler抓包【1】_介绍及界面概述
查看>>
OpenOCD初始化脚本(u-boot)
查看>>
python数字图像处理(10):图像简单滤波
查看>>
phonegap ios默认启动页
查看>>
第四章 栈与队列3 (堆栈的应用)
查看>>
object.key和object[key]
查看>>
网络IPC:套接字之带外数据
查看>>
Vue – 基础学习(2):组件间 通信及参数传递
查看>>
平台调用数据类型
查看>>
python3之multiprocess模块(上)
查看>>
Python-列表-9
查看>>
LeetCode-309.Best Time to Buy and Sell Stock with Cooldown
查看>>
ThinkPHP CURD方法盘点:data方法
查看>>