【Android】使用Binder(AIDL)实现利用自定义Bean进行的进程间通信(二)

项目前置

这是我之前写的关于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 Creator<CpServiceMsg> CREATOR = new Creator<CpServiceMsg>() {
        @Override
        public CpServiceMsg createFromParcel(Parcel in) {
            return new CpServiceMsg(in);
        }

        @Override
        public CpServiceMsg[] newArray(int size) {
            return new CpServiceMsg[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(channel);
        dest.writeInt(id);
        dest.writeString(data);
    }

    @Override
    public 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】

在这里插入图片描述
然后就可以进行服务的绑定了
在这里插入图片描述
接下里就是使用了
在这里插入图片描述
然后就饿没什么了,启动服务端,启动客户端,进行数据通信了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/722646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

产业生态远超预期,商用进程全面提速:5G RedCap,凭什么这么火?

2022年6月&#xff0c;3GPP R17版本正式宣布冻结。除了针对传统5G技术标准进行完善之外&#xff0c;R17还推出了一项新的中高速物联技术标准&#xff0c;也就是我们今天文章的主角——RedCap。 RedCap推出后&#xff0c;受到了业界上下的广泛关注。它在传统5G的基础上&#xff…

新手小白系列——关于 Docker 安装的方法

Docker 是一个应用打包、分发、部署的工具基础概念&#xff1a; 镜像&#xff1a;软件安装包&#xff0c;可以方便的进行传播和安装。 容器&#xff1a;软件安装之后的状态&#xff0c;每个软件运行环境都是独立的、隔离的&#xff0c;称之为容器 仓库&#xff1a;专门用来传播…

k8s集群新增计算节点使用华为iscsi存储创建的pvc存储挂载报错:FailedMount

背景&#xff1a; 因公司业务需求的增长&#xff0c;导致kubernetes集群测试环境的计算节点资源不够使用了&#xff0c;这时候就申请了几台服务器加入到kubernetes集群中&#xff0c;因为维护的kubernetes集群的对接华为了iscsi存储&#xff0c;通过storageclass组件来创建pvc存…

Vue3中的常见组件通信之插槽

Vue3中的常见组件通信之插槽 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs…

GANs网络在图像和视频技术中的应用前景

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

vue3中实现3D地图——three.js

需求点 地图区域大小随着父盒子大小变动&#xff0c;窗口缩放自动适配每个区域显示不同颜色和高度&#xff0c;描边每个区域显示名字label和icon点击区域改变其透明度&#xff0c;并且弹窗显示信息窗口点击点也可以可以自由放大缩小&#xff0c;360度旋转 包 npm install d3^…

lib9-02 配置扩展 ACL

实验&#xff1a;配置扩展 ACL 1、实验目的 通过本实验可以掌握编号扩展 ACL 定义和应用的方法命名扩展 ACL 定义和应用的方法 2、实验拓扑 实验拓扑如下图所示。使用扩展 ACL 实现如下访问控制 拒绝 PC1 所在网段访问 Server1 的 Web 服务拒绝 PC2 所在网段访问 Server1 …

Localization.strings文件显示乱码

项目场景&#xff1a; ios app 的多语言检测 问题描述 想检测app本地化文件&#xff0c;但打开Localization.strings文件发现都是乱码 原因分析&#xff1a; 1.编码问题 2.strings被识别编码成了binary的格式 解决方案&#xff1a; 使用苹果提供的plutil把binary转成json格…

天风宏观:再论经济“去金融化”

天风宏观认为&#xff0c;经济“去地产化”之后也正在“去金融化”&#xff0c;应逐渐淡化金融数据对于经济的指示意义&#xff0c;更关注经济数据本身和进行中的结构转型。 5月金融数据延续了此前逻辑&#xff0c; 受规范手工补息、存款分流等因素影响&#xff0c;M1同比-4.2%…

chrome 使用本地替换功能替换接口返回内容

前言 在web开发或测试过程中&#xff0c;我们经常会需要修改接口返回值来模拟数据进行开发或测试。 常用的方式一般通过抓包工具&#xff0c;如charles&#xff0c;或fildder 的功能。 例如我们可以使用charles打断点的方式&#xff0c;或者使用charles的map local 功能进行…

2024 AI大模型 常问的问题以及答案(附最新的AI大模型面试大厂题 )

前言 在2024年AI大模型的面试中&#xff0c;常问的问题以及答案可能会涵盖多个方面&#xff0c;包括AI大模型的基础知识、训练过程、应用、挑战和前沿趋势等。由于我无法直接附上174题的完整面试题库及其答案&#xff0c;我将基于提供的信息和当前AI大模型领域的热点&#xff…

高中数学:数列-累加法与累乘法

一、累加法 主要用来解决类似等差数列递推公式的相关变形题目 1、推导等差数列的通项公式 2、题型1 对递推式变形&#xff0c;通项的系数为1&#xff0c;常数项d变成含n的一次函数 解&#xff1a; 题型2 对递推式变形&#xff0c;通项的系数为1&#xff0c;常数项d变成含…

hdfs源码解析之DFSClient

1、DFSClient类简介 DFSClient 是 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;中的一个核心类&#xff0c;用于客户端与 HDFS 之间的交互。它提供了一组方法&#xff0c;使客户端应用程序可以方便地与 HDFS 进行通信&#xff0c;包括文件的读取、写入、创建、删除、重命…

探索磁力搜索引擎:互联网资源获取的新视角

在当今数字化社会中&#xff0c;寻找和获取网络资源变得更加便捷和多样化。磁力搜索引擎作为这一趋势的一部分&#xff0c;提供了一种新颖而有效的方法来定位和获取用户所需的文件、媒体和其他数字内容。本文将深入探讨磁力搜索引擎的工作原理、使用场景及其在网络文化中的影响…

BizDevOps全局建设思路:横向串联,纵向深化

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay BizDevOps概述 IT技术交付实践方法在不断迭代中持续优化。在工业化时代&#xff0c;Biz&#xff08;业务&#xff09;、Dev&#xff08;开发&#xff09;、Ops&#xff08;运维&#xff09;三者往往相对分离&#xff0c;甚至有…

JAVA的优势是什么?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; java编程语言自1995年问世…

家人们,我最近迷上了食家巷的方形饼

那独特的方形造型&#xff0c;超级可爱。&#x1f44f;刚出炉的方形饼&#xff0c;热气腾腾&#xff0c;散发着诱人的香气。&#x1f60b;咬一口&#xff0c;酥脆的外皮“咔滋”作响&#xff0c;里面的面饼却又十分绵软&#xff0c;口感层次超丰富&#xff01;&#x1f929;无论…

【查看显卡信息】——Ubuntu和windows

1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN&#xff0c;也安装不了显卡驱动 查看显卡信息&#xff1a; lspci | grep -i vga 不会显示显卡信息&#xff0c;只会输出VMware SVGA II Adapter&#xff0c;表示这是一个虚拟机&#xff0c;无法安装和使用显卡驱动 使用上…

Chromium 开发指南2024 Mac篇-开始编译Chromium(五)

1.引言 在之前的指南中&#xff0c;我们已经详细介绍了在 macOS 上编译和开发 Chromium 的准备工作。您学会了如何安装和配置 Xcode&#xff0c;如何下载和配置 depot_tools&#xff0c;以及如何获取 Chromium 的源代码。通过这些步骤&#xff0c;您的开发环境已经搭建完毕&am…

压力应变桥信号变送光电隔离放大模块PCB焊接式 差分信号输入0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA

概述&#xff1a; IPO压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。该模块内部嵌入了一个高效微功率的电源&#xff0c;向输入端和输出端…