Android - AIDL

news2024/9/21 2:32:56

一、概念

二、使用

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.coloradmin.cn/o/729586.html

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

相关文章

MySQL库表的简单操作

1.创建数据Market,在数据库中创建表customers,表结构如图 (1)创建数据库Market create database Market; (2)创建数据表customers,在c_num字段添加主键约束,c_birth字段上添加非空约束 create table customers&#…

IDEA 导入多模块项目并设置运行

1、导入多模块项目 导入的步骤点击左上角File->New->Module from Existing Sources,最后点击选择项目的pom文件即可 2、设置模块 如果pom.xml文件是灰色并且有横杠,则需要这样设置: 把√去掉。 项目结构如图所示: 本项…

Linux下如何使用git?如何搭建自己的库?

前言: 本文主要介绍如何在 Linux 中使用 git 、gitee 账号注册、如何新建远程仓库与本地仓库 以及 git 的常用指令。 一.安装git 切换至 root 用户身份,输入指令: yum install -y git使用 sudo 指令; sudo yum install -y git二…

《Redis 核心技术与实战》课程学习笔记(四)

Redis 持久化机制 AOF日志:宕机了,Redis 如何避免数据丢失? 一旦服务器宕机,内存中的数据将全部丢失。目前,Redis 的持久化主要有两大机制,即 AOF 日志和 RDB 快照。 AOF 日志是如何实现的? …

【架构设计】架构知识体系

文章目录 1、什么是架构和架构本质2、架构分类2.1、业务架构(俯视架构)2.2、应用架构(剖面架构,也叫逻辑架构图)2.2.1、职责划分: 明确应用(各个逻辑模块或者子系统)边界2.2.2、职责之间的协作&…

[TPAMI 2022] 神经网络元学习:综述

Meta-Learning in Neural Networks: A Survey | IEEE Journals & Magazine | IEEE Xplore Meta-Learning in Neural Networks: A Survey 摘要: 近年来,元学习(或“学会学习”)领域的兴趣急剧上升。与使用固定学习算法从头开…

TensorFlow: mode.save()报错 non-trackable object: (None, None)

问题描述 环境:tensorflow2.2.0 执行model.save(), 报错 ...non-trackable object: (None, None)... 解决办法 搞了半天没有找到好的办法,只能通过升级搞定 pip uninstall tensorflow pip install tensorflow2.6.0 pip install --upgrade keras2.6…

机器学习算法总结

机器学习算法 参考博客:https://blog.csdn.net/lemonbit/article/details/125775595#:~:text干货| 机器学习模型与算法最全分类汇总! 1 线性回归、逻辑回归、Lasso回归、Ridge回归、线性判别分析 2 K近邻、决策树、感知机、神经网络、支持向量机 3,AdaBo…

用for循环打印图形

目录 一、打印矩形 二、打印直角三角形 1.直角三角形 2.打印九九乘法表 三、打印等腰三角形 四、打印平行四边形 五、打印菱形 六、打印两个直角三角形 1.打印两个直角三角形 2.打印倒着的两个直角三角形 七、打印“蝴蝶” 一、打印矩形 //打印矩形for (int i 0; i < a;…

win10 python3.7 pycharm安装dlib库报错

使用pycharm安装dlib一直报错 心态有点崩 好在没有放弃 解决了 报错 note: This is an issue with the package mentioned above, not pip. hint: See above for output from the failure. 解决&#xff1a;直接好用的就是安装.whl文件 将下载好对应Python3.7版本的.whl…

C#中委托(delegate) 事件(event) Action<T>和Func<T,TResult>(泛型委托) 的区别

最近开发C#项目,发现有很多关键字不认识,特此笔记: 委托(delegate) 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用,相当于C++中函数指针 的概念。 我们经常遇到的EventHandler 、其实就是一个委托、大家看看它的定义 使用如下: public delegate v…

Verilog学习笔记4:二选一逻辑

代码1&#xff1a; timescale 1ns/10psmodule fn_sw(a,b,sel,y); input a,b,sel; output y; assign y(sel)?a^b:a&b;endmodulemodule fn_sw_tb;reg A,B,sel; wire Y; fn_sw fn_sw(.a(A),.b(B),.sel(sel),.y(Y));initial begin sel<0;A<0;B<0;#10 sel<0;A&l…

【编程语言 · C语言 · 结构与结构】

【编程语言 C语言 结构与结构】https://mp.weixin.qq.com/s/NENaQ8wmO690g3HqNNO0cQ

Go语言程序设计(十五)接口

一、接口的概念 简单地说&#xff0c;Interface是一组Method的组合,可以通过Interface来定义对象的一组行为。如果某个对象实现了某个接口的所有方法&#xff0c;就表示它实现了该“接口”&#xff0c;无须显式地在该类型上添加接口说明。 假设定义了两个对象Teacher和…

SQL-每日一题【550.游戏玩法分析Ⅳ】

题目 Table: Activity 编写一个 SQL 查询&#xff0c;报告在首次登录的第二天再次登录的玩家的比率&#xff0c;四舍五入到小数点后两位。换句话说&#xff0c;您需要计算从首次登录日期开始至少连续两天登录的玩家的数量&#xff0c;然后除以玩家总数。 查询结果格式如下所示…

MYSQL的基本数据类型和建库

1.创建数据库&#xff0c;删除数据库&#xff0c;查询创建数据的语句&#xff0c;使用数据库&#xff0c;查询当前默认的数据库以及使用的编码方式校验规则 2.数字&#xff0c;文本&#xff0c;日期 在一章表中定义多个字段&#xff0c;要使用今天提到的所有的数据类型 1创建数…

10款设计师常用的APP页面设计软件

APP页面设计是APP实施过程中的关键步骤&#xff0c;APP页面设计是不是别具一格&#xff0c;取决于消费者对APP最直观的视觉效果分辨。 要创建一个令人惊讶的APP页面设计&#xff0c;一个高效率的APP界面设计软件是不可缺少的。 本文列出10款最流行的APP界面设计软件&#xff…

VScode搭建C/C++开发环境

目录 1.VScode是什么&#xff1f; 2.VScode的下载和安装 2.1下载和安装 下载&#xff1a; 安装&#xff1a; 2.2环境的介绍 环境介绍&#xff1a; 安装中文版插件 &#xff1a; 3.VScode配置C/C开发环境 3.1下载和配置MinGW-w64 编译器套件 下载&#xff1a; 配置M…

每日浅读SLAM论文——简析LIO-SAM

文章目录 Overview雷达里程计IMU预积分GPS回环代码结构解析 今天讲一篇经典的LIO&#xff08;LiDAR-Inertial Odometry&#xff09;SLAM论文——LIO-SAM。 雷达里程计由于其高鲁棒性、较低成本&#xff08;二维雷达不贵、三维雷达价格也在降、IMU不太贵&#xff09;&#xff0c…

【解决】uniapp的全局公共组件(不用在每个页面引入组件标签),各平台均可使用!!!!

感谢滚动君大佬提供的思路&#xff0c;但是此方法只适用于微信小程序 app端之所以不能用的关键原因在于不能找到resourcePath原始路径&#xff0c;不像小程序会提供一个路径区分哪些文件来自组件哪些文件来自页面&#xff0c;如果不做区分&#xff0c;那么页面栈就会超载&…