Android - AIDL

一、概念

二、使用

2.1 Server 端

2.1.1 创建 .aidl 文件

Module右键→New→AIDL→AIDL File(如果不可选,在build.gradle的buildFeatures节点添加aidl true)。

在创建的接口中定义抽象方法。 

interface IDemoAidlInterface {//自己的业务void setName(String name);String getName();
}

Rebuild一下,就会生成对应的Java类。Android目录在 java(generated) 里,Program目录在 build/generated/aidl_source_output_dir 里。

 

2.1.2 创建 Service 对外暴露接口

别忘了在 AndroidManifest 中注册Service。

class DemoService : Service() {override fun onBind(intent: Intent): IBinder {return IDemoImpl()  //返回实现类对象}//实现接口(注意是.Stub)class IDemoImpl : IDemoAidlInterface.Stub() {private var name: String = "成功了!"override fun setName(name: String?) {this.name = name.orEmpty()}override fun getName(): String = name}
}

2.2 Client 端

2.2.1 复制 .aidl 文件

Moudle右键→New→Filder→Aidl Folder 新建文件夹,然后创建和 Server 端相同的包名将 Server 端的 .aidl 文件复制粘贴过去,最后Rebuild一下。

 

2.2.2 AndroidManifest 配置权限

除了之前创建的 Service 需要注册,还要添加查询包的权限,包名是 Server 端的。

2.2.3 启动服务调用API

val conn = object : ServiceConnection {override fun onServiceConnected(name: ComponentName?, service: IBinder?) {//拿到对象就可以调用各种方法了val demoBinder = IDemoAidlInterface.Stub.asInterface(service)}override fun onServiceDisconnected(name: ComponentName?) {}
}
//开启服务
val intent = Intent()
intent.component = ComponentName("com.jomuiphys.service.service", "com.jomuiphys.service.service.DemoService")
context.bindService(intent, conn, AppCompatActivity.BIND_AUTO_CREATE)

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

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

相关文章

【STM32MP135】修复EMMC模式启动时,uboot启动识别为usb0设备问题

文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/arch/arm/dts/stm32mp135d-atk.dts 文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/configs/stm32mp13_defconfig

基于霍夫变换的航迹起始算法研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 一、设计内容 利用Hough变换处理量测得到的含杂波的二维坐标,解决多目标航迹起始问题。使用Matlab进行仿真&#x…

TeeChart for.NET Crack

TeeChart for.NET Crack TeeChart for.NET为各种图表需求提供了图表控件,包括金融、科学和统计等重要的垂直领域。它可以处理您的数据,在各种平台上无缝创建信息丰富、引人入胜的图表,包括Windows窗体、WPF、带有HTML5/Javascript渲染的ASP.N…

k8s+springboot+CronJob 定时任务部署

kubernetesspringbootCronJob 定时任务配置如下代码: cronjob.yaml k8s 文件 apiVersion: batch/v1 kind: CronJob metadata:name: k8s-springboot-demonamespace: rz-dt spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 …

2023.7月最新版idea安装Jrebel实现热部署,可解决后端启动等待时间过长问题

2023.7最新版idea热部署配置 一 下载jrebel插件二 激活我使用的方法 三 配置方式1 设置自动编译2 设置 compiler.automake.allow.when.app.running3 勾选项目,然后以Rebel方式启动 4 Settings查看Activation情况四 报错解决1 启动失败 2 端口被占用 五 总结 一 下载…

vue3+vite+Ts 基于Antv/x6 绘制流程图

需求效果: 需求: 实现一个流程图,双击可对相应的组件进行一些功能操作; 工具栈: 这里使用antv/x6, 基于vue3vitets进行开发 官网地址: https://x6.antv.antgroup.com/examples/showcase/pra…

代码随想录算法训练营第六十二天—图论补充

理论基础&#xff1a; 第一题、所有可能的路径 力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void dfs(vector<vector<int>>& graph, int x){if(x graph.size() - 1){result.push_back(path);retu…

科技资讯|苹果Vision Pro手部追踪和手势相关新专利曝光

近日&#xff0c;美国专利商标局正式授予苹果一项与 Apple Vision Pro 主要功能相关的专利&#xff1a;手部追踪和手指手势。 苹果专利指出&#xff0c;沉浸感的质量取决于几个重要因素。例如&#xff0c;显示器的特性&#xff0c;如图像质量、帧率、像素分辨率、高动态范围 …

vue3+mapboxgl鼠标浮动显示cgcs2000

一、需求 鼠标在地图中浮动展示地图的经纬度&#xff0c;cgcs2000 xy 还有显示带号 二、实现效果 展示经度&#xff0c;纬度&#xff0c;x值&#xff0c;y值显示的是带号和y值 三、思路 3.1、mapbox获取经纬度方法 初始化地图后.on方法中有个mousemove方法 mapboxUtil._m…

2023年31个最适合博主的WordPress主题

自从我最初开始写博客以来&#xff0c;在近十年的经验中&#xff0c;我已经出于各种目的在多个博客中测试和使用了数十种不同的 WordPress 主题。 以下是我挑选的绝对最佳WordPress主题&#xff0c;专门针对不想编写一行代码的博主。 无论您是想创建个人理财博客、撰写时尚、…

[RocketMQ] Broker asyncPutMessage处理消息以及存储的高性能设计措施 (十一)

asyncPutMessage方法真正的用来存储消息。 文章目录 1.asyncPutMessage存储普通消息1.1 checkStoreStatus检查存储状态1.2 checkMessage检查消息 2.CommitLog#asyncPutMessage异步存储消息2.1 处理延迟消息2.2 获取最新mappedFile2.2.1 tryCreateMappedFile创建新的MappedFile2…

【LeetCode热题100】打卡第33天:环形链表LRU缓存

文章目录 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存⛅前言 环形链表&#x1f512;题目&#x1f511;题解 LRU缓存&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存 ⛅前言 大家好&#xff0c;我是知…