#背景 本项目通过后台服务实现与蓝牙遥控器的GATT通讯,获取压缩语音数据后通过jni库进行解码, client端可通过AIDL接口获取解码后的PCM语音数据;
#什么是AIDL AIDL (Android Interface Definition Language, Android接口定义语言) 在不同的进程(应用)之间进行数据交换,就要约定 之间的通信接口。
从面向对象的角度来看,接口设计要考虑状态和行为。一般来说,接口定义的内容分为: 1.方法操作(描述行为) 2.参数(描述状态,数据的类型,数据的载体/实体)
AIDL是一种IDL,它有特有的语法描述。我们需要编写一个AIDL文件作为约定。它的语法非常类似java语法。 它支持基础数据类型,比如 int,String,float等。 它支持实体类,必须是实现了Parcelable接口,支持序列化。
AIDL通过服务绑定的方式来使用。你需要定义一个service,传递一个 IBinder对象。这个 IBinder对象具有我们需要的方法。 拿到这个对象后执行具体方法。
AIDL分为 服务端和客户端 服务端即服务提供着,提供可操作的方法和数据。 客户端即调用者,使用方法和数据。
什么时候适合使用AIDL: 官方文档建议只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service,以及想在你的service处理多线程。
#步骤说明
##服务端开发步骤如下: 1.定义一个AIDL文件 2.实现描述的接口,编写service 3.如果有实体类,需要提供实体类(jar包形式)
##客户端 1.拿到AIDL文件 2.绑定服务,获得接口持有对象。