做钢材的都用什么网站,免费的网站管理系统,档案网站 内容建设,做查询网站 发布数据项目前置
这是我之前写的关于Binder的一些知识点和使用基本数据类型在通信的文章#xff0c;感兴趣的可以看一下: Binder#xff08;一#xff09;Binder的介绍和AIDL使用Binder的实例
项目目标
在两个APP之间进行数据传递#xff0c;使用Android推荐的Binder通讯#…项目前置
这是我之前写的关于Binder的一些知识点和使用基本数据类型在通信的文章感兴趣的可以看一下: Binder一Binder的介绍和AIDL使用Binder的实例
项目目标
在两个APP之间进行数据传递使用Android推荐的Binder通讯而AIDL是Android推出的用来简化Binder写法的工具。
如果只是简短的使用java基本数据类型的话只需要根据上面的那一篇文章对着来就可以了这次我们需要使用我们自定义的数据bean来进行数据传递而且是在实际项目中使用就需要进行一些处理了。
项目需求
在这里为了区分将接收数据的项目作为客户端将发送数据的服务app作为服务端。服务端要获取外部数据然后将这个数据通过Binder发送到客户端客户端接收数据。
项目实现
服务端
首先我们要创建一个新的项目然后在新的项目里面创建AIDL
创建AIDL aidl文件夹和java文件夹同级都在main文件夹下面 创建完之后会得到一个这样的文件 然后再java的同名同级别文件下面创建一个数据bean文件 数据bean代码如下
public class CpServiceMsg implements Parcelable {public int channel;public int id;public String data;public CpServiceMsg(int channel, int id, String data) {this.channel channel;this.id id;this.data data;}public int getChannel() {return channel;}public void setChannel(int channel) {this.channel channel;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getData() {return data;}public void setData(String data) {this.data data;}protected CpServiceMsg(Parcel in) {channel in.readInt();id in.readInt();data in.readString();}public static final CreatorCpServiceMsg CREATOR new CreatorCpServiceMsg() {Overridepublic CpServiceMsg createFromParcel(Parcel in) {return new CpServiceMsg(in);}Overridepublic CpServiceMsg[] newArray(int size) {return new CpServiceMsg[size];}};Overridepublic int describeContents() {return 0;}Overridepublic void writeToParcel(NonNull Parcel dest, int flags) {dest.writeInt(channel);dest.writeInt(id);dest.writeString(data);}Overridepublic String toString() {return CpServiceMsg{ channel channel , id id , data data \ };}
}
注意 1.这个数据bean要实现【Parcelable】接口 2.尽量不要用byte[]类型因为如果是高版本和低版本软件进行通信的时候低版本的没有读取byte[]数据的快捷方法。
接下来在aidl的相同的目录下创建这个 首先创建文件夹bean 然后创建文件【CpServiceMsg.aidl】 这两个文件是同名文件而且他们的文件目录也是同样的只是一个在aidl里面一个在java文件夹里面而已这个需要注意一下。
然后在【CpServiceMsg.aidl】文件里面添加 然后在这个【ICPService.aidl】文件里面添加方法 这样的话我们AIDL就写好了然后需要【Build】一下项目。
这样Android Studio会自动帮我们生成相关代码可以在这个地方查看 接下来我们需要使用这个AIDL
首先我创建一个服务类 然后为了方便可以在这个服务类里面创建类继承系统生成的aidl 然后在MyForegroundService类里面 然后 这样当客户端连接到这个服务端的时候这个onBind会调用返回这个myBinderCpService
然后客户端调用这个getCanMsg方法的时候就会获得这个 还有一定要记得在【AndroidManifest.xml】注册清单文件里面对这个服务类进行注册
客户端
客户端这边也要创建一个aidl文件但是客户端的aidl文件不要自己写要直接从服务端直接复制过来不要改什么东西。 然后在这个java文件夹下面创建同样的目录结构当用在项目里面的时候这个是肯定要做的因为每个项目都有自己的目录结构这就需要自己创建这个相关的目录结构不然到时候aidl找不到文件 这个文件直接从服务端直接复制就好了。
然后需要进行【Build】一下这样系统会创建项目的文件类。
在需要使用的地方比如在一个【Activity】里面 然后创建一个【ServiceConnection】 然后就可以进行服务的绑定了 接下里就是使用了 然后就饿没什么了启动服务端启动客户端进行数据通信了。