【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>() {@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】

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PKCS和X.509标准的区别是什么?

PKCS(Pulic Key Cryptography Standards)和X.509标准都是与公钥加密和数字证书相关的标准&#xff0c;但它们的主要职责和关注点略有不同&#xff1a; 1. PKCS&#xff08;Public Key Cryptography Standards&#xff09; PKCS是一系列标准&#xff0c;由RSA Security开发&am…

使用Flink接受kafka中的数据并对数据进行ETL

做这个开发是因为&#xff1a;在实际开发操作中&#xff0c;你的kafka主题中会有大量的数据但是需求并不需要所有数据&#xff0c;所有我们要对数据进行清洗&#xff0c;把需要的数据保存在flink流中&#xff0c;为下流的开发做好数据保障&#xff01; 首先创建工具类 再写一…

Golang | Leetcode Golang题解之第151题反转字符串中的单词

题目&#xff1a; 题解&#xff1a; import ("fmt" )func reverseWords(s string) string {//1.使用双指针删除冗余的空格slowIndex, fastIndex : 0, 0b : []byte(s)//删除头部冗余空格for len(b) > 0 && fastIndex < len(b) && b[fastIndex]…

NLP之实体抽取

简介 实体抽取(Entity Extraction)是自然语言处理(NLP)领域中一项重要的技术,它的目的是从非结构化的文本数据中识别并提取出有意义的实体。 实体是指文本中表示某种具体事物的词语或短语,通常包括以下几类: 人名&#xff1a;如"马云"、“比尔盖茨” 地名&#xf…

封装组件防抖

common.js 建立throttle.js文件 import Vue from vue //按钮节流 const preventReClick Vue.directive(preventReClick, {inserted: function (el, binding) {el.addEventListener(click, () > {if (!el.disabled) {el.disabled truesetTimeout(() > {el.disabled fa…

视频与音频的交响:探索达摩院VideoLLaMA 2的技术创新

一、简介 文章&#xff1a;https://arxiv.org/abs/2406.07476 代码&#xff1a;https://github.com/DAMO-NLP-SG/VideoLLaMA2 VideoLLaMA 2是由阿里巴巴集团的DAMO Academy团队开发的视频大型语言模型&#xff08;Video-LLM&#xff09;&#xff0c;旨在通过增强空间-时间建模…

高考分数线一分一段统计汇总(熟练SQL窗口函数)

高考分数线一分一段统计汇总(使用SQL窗口函数) select 总分数&#xff0c; 一分一段人数&#xff0c; sum(一分一段人数) over( order by 总分数 desc) as 累计排名 from( select 总分数&#xff0c; count(考生号) as 一分一段人数 from &#xff08; select 考生号&…

Java数组的声明和使用方法是什么?

在Java中&#xff0c;数组是一种用于存储相同类型数据的常用数据结构。声明和使用Java数组的方法如下&#xff1a; 数组的声明 声明数组的基本语法是&#xff1a; dataType[] arrayName; 例如&#xff0c;声明一个整型数组可以写为&#xff1a; int[] numbers; 这种方式推…

大咖专栏 | AI 时代下,我们可以拥有怎样的数据库?

Hi&#xff0c;各位朋友们&#xff0c;我是 KaiwuDB 高级架构师赵衎衎。 KaiwuDB 始于万物互联时代下千万条数据洪流中&#xff0c;我们持续打磨构造了更加灵活兼容的分布式多模架构&#xff0c;实现了海量异构数据高性能、低成本的集中管理… …这些底层特性都在为后续提供更…

多线程与高并发- Synchronized锁

简介 synchronized 是 Java 语言的一个关键字&#xff0c;它允许多个线程同时访问共享的资源&#xff0c;以避免多线程编程中的竞争条件和死锁问题。synchronized可以用来给对象或者方法进行加锁&#xff0c;当对某个对象或者代码块加锁时&#xff0c;同时就只能有一个线程去执…

界面组件Kendo UI for Angular 2024 Q2亮点 - 让应用程序界面拥有AI提示

随着最新的2024年第二季度发布&#xff0c;Kendo UI for Angular为应用程序开发设定了标准&#xff0c;包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示&#xff0c;从设计到代码的生产力增强、可访问…

【分数限制下,专科学子将何去何从】

本文仅讲述专科学子 高考之前&#xff0c;咱就是班里中等偏上水平&#xff0c;有时考试考的好点能冲上历年本科线&#xff0c;有时考的差点就直接名落孙山。 现在高考完了&#xff0c;也就可能在本科线周围晃荡&#xff0c;那我接下来该怎么办呢。 是继续上学&#xff0c;还是去…

奇怪的缓存一致性问题

天猫国际用户Push中心承接了国际用户触达相关的需求&#xff0c;比如短信、端内消息投放等等&#xff0c;并存在较高的并发场景。 该系统此前发现了一个查询投放计划plan为null的异常情况&#xff0c;在初期排查时有些丈二和尚摸不着头脑&#xff0c;后面突然灵光乍现——原来是…

EXCEL表格处理

怎么把excel中表示日期的列“1979/1/1”改成两列一列是“1979”另一列是“1”&#xff0c;也即是说第一例表示年份&#xff0c;第二列表示这是某一年的第几天。如何实现&#xff1f; 要将Excel中的日期列拆分为年份和一年中的第几天&#xff0c;你可以使用以下步骤&#xff1a…

Django从入门到精通:First [Django版本.Python面向对象.Web基础.创建Django项目]

文章目录 Django初学者指南1 Django简介1.1 Django的历史1.2 使用Django的知名网站1.4 Django的主要特点1.5 Django的工作原理 2 Django 版本选择2.1 Django 支持的 Python 版本2.2 Django 版本 3 Django 开发 Web 程序3.1 Python知识点3.1.1 Python 函数3.1.2 Python 面向对象…

qnx 网络架构,io-pkt-v6-hc进程等.

QNX 网络架构_io-pkt-v6-hc-CSDN博客 我们的本机网络子系统由网络管理器可执行文件(io-pkt-v4、io-pkt-v4-hc或io-pkt-v6-hc)以及一个或多个共享库模块组成。这些模块可以包括协议(例如lsm-qnet.so)和驱动程序(例如devnp-speedo.so)。 io-pkt-v6-hc进程 是qnx下的网卡驱动 驱动…

VBS Excel插件的安装与卸载

可以通过下面的安装与卸载脚本&#xff0c;将xxxxxxxx.xlam AddIns&#xff08;插件&#xff09;安装或卸载。 注意&#xff0c;在安装或卸载前需要退出所有启动的Excel文件。 下面的代码复制粘贴到文本文件&#xff0c;替换好文件名称&#xff0c;另存为.vbs文件&#xff0c;并…

PHP RSA密文过长加密解密 越过1024的解决代码-PHP RSA分段加密解密

在PHP中&#xff0c;RSA证书的大小&#xff08;通常是密钥的长度&#xff0c;如1024位、2048位或更高&#xff09;是由你生成的密钥对或你获得的证书决定的。RSA算法有一个固定的加密数据块大小限制&#xff0c;这取决于密钥的长度和所使用的填充方案。例如&#xff0c;对于PKC…

智能鼠类监测设备

TH-SH1在人类社会与自然环境共存的过程中&#xff0c;鼠类作为一类常见的害虫&#xff0c;给我们的生活、生产带来了诸多不便。为了更好地控制鼠害&#xff0c;科学家们不断研发出各种高效的监测与防控设备。近期&#xff0c;一款全新的鼠类监测设备崭露头角&#xff0c;其能够…

python基础语法学习(工程向)-Stage3-数据可视化

json 是一种轻量的数据交互格式&#xff0c;可以按照json指定的格式去组织和封装数据&#xff0c;而本质上是一个带有特定格式的字符串。 功能 json是在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言之间的数据传递和交互。 格式 json的格式要求较为严格&#…