当前位置: 首页 > news >正文

Android JNI传递CallBack接口并接收回调

在JNI中,可以通过传递一个Java接口对象的引用给C++代码,并在C++代码中调用该接口对象的方法,实现JAVA层监听C++数据变化,下面是一个简单的示例:

  1. 在Java代码中定义一个CallBack接口和JNI方法

     class TestLib {companion object{init {System.loadLibrary("jnitest")}}external fun stringFromJNI(): Stringexternal fun init(callBack: CallBack)interface CallBack{fun onData(count:Int,data:String)}
    }
    
  2. 使用JNI实现将Java接口对象传递给C++代码,并在C++代码中调用接口方法。
    在C++代码中,需要使用JNI函数GetMethodID获取接口方法的ID,并使用CallVoidMethod调用接口方法:

     extern "C"JNIEXPORT void JNICALLJava_com_test_jnitest_TestLib_init(JNIEnv *env, jobject thiz, jobject call_back) {// 获取接口类及其方法IDLogUtil::info("test", "Hello");jclass  callClass = env->GetObjectClass(call_back);jmethodID  callMethod = env->GetMethodID(callClass,"onData","(ILjava/lang/String;)V");// 调用接口方法jint arg1 = 200; // 第一个参数为 int 类型jstring arg2 = env->NewStringUTF("HelloWorld"); // 第二个参数为 String 类型env->CallVoidMethod(call_back, callMethod,arg1,arg2);// 释放局部引用env->DeleteLocalRef(arg2);}
    
  3. 在Java代码中调用C++代码,并将接口对象作为参数传递给C++代码:

     TestLib.init(object : TestLib.CallBack{override fun onData(count: Int, data: String) {Log.i(TAG,"onData ${count} ${data}")}})
    
  4. 执行后日志打印:

     test                    com.test.jnitest                     I  HelloMainActivity            com.test.jnitest                     I  onData 200 HelloWorld
    

相关文章:

Android JNI传递CallBack接口并接收回调

在JNI中,可以通过传递一个Java接口对象的引用给C代码,并在C代码中调用该接口对象的方法,实现JAVA层监听C数据变化,下面是一个简单的示例: 在Java代码中定义一个CallBack接口和JNI方法 class TestLib {companion objec…...

机器学习:特征工程之特征预处理

目录 特征预处理 1、简述 2、内容 3、归一化 3.1、鲁棒性 3.2、存在的问题 4、标准化 ⭐所属专栏:人工智能 文中提到的代码如有需要可以私信我发给你😊 特征预处理 1、简述 什么是特征预处理:scikit-learn的解释: provide…...

高级艺术二维码制作教程

最近不少关于二维码制作的,而且都是付费。大概就是一个好看的二维码,扫描后跳转网址。本篇文章使用Python来实现,这么简单花啥钱呢?学会,拿去卖便宜点吧。 文章目录 高级二维码制作环境安装普通二维码艺术二维码动态 …...

每日一题leetcode--使循环数组所有元素相等的最少秒数

相当于扩散,每个数可以一次可以扩散到左右让其一样,问最少多少次可以让整个数组都变成一样的数 使用枚举,先将所有信息存到hash表中,然后逐一进行枚举,计算时间长短用看下图 考虑到环形数组,可以把首项n放…...

tauri-react:快速开发跨平台软件的架子,支持自定义头部UI拖拽移动和窗口阴影效果

tauri-react 一个使用 taurireacttsantd 开发跨平台软件的模板,支持窗口头部自定义和窗口阴影,不用再自己做适配了,拿来即用,非常 nice。而且已经封装好了 tauri 的 http 请求工具,省去很多弯路。 开原地址&#xff…...

k8s 自身原理之 Service

好不容易,终于来到 k8s 自身的原理之 关于 Service 的一部分了 前面我们用 2 个简图展示了 pod 之间和 pod 与 node 之间是如何通信息的,且通信的数据包是不会经过 NAT 网络地址转换的 那么 Service 又是如何实现呢? Service 我们知道是用…...

arduino Xiao ESP32C3 oled0.96 下雪花

Xiao ESP32C3使用oled 0.96实现下雪的功能 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花 其他雪花下落的时候, 其他雪花的一圈如果遇到-1, 则停止下落, 并重复2 #include "oled.h" void …...

ElasticSearch索引库、文档、RestClient操作

文章目录 一、索引库1、mapping属性2、索引库的crud 二、文档的crud三、RestClient 一、索引库 es中的索引是指相同类型的文档集合,即mysql中表的概念 映射:索引中文档字段的约束,比如名称、类型 1、mapping属性 mapping映射是对索引库中文…...

Effective Java 案例分享(九)

46、使用无副作用的Stream 本章节主要举例了Stream的几种用法。 案例一&#xff1a; // Uses the streams API but not the paradigm--Dont do this! Map<String, Long> freq new HashMap<>(); try (Stream<String> words new Scanner(file).tokens()) …...

SpringBoot复习:(56)使用@Transactional注解标记的方法的执行流程

首先&#xff0c;如果在某个类或某个方法被标记为Transactional时&#xff0c;Spring boot底层会在创建这个bean时生成代理对象&#xff08;默认使用cglib) 示例&#xff1a; 当调用studentService的addStudent方法时&#xff0c;会直接跳到CglibAopProxy类去执行intercept方…...

JVM——引言+JVM内存结构

引言 什么是JVM 定义: Java VirtualMachine -java 程序的运行环境 (ava 二进制字节码的运行环境) 好处: 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越界检查&#xff0c;多态 比较: jvm jre jdk 学习jvm的作用 面试理解底层实现原理中…...

open cv学习 (十)图形检测

图形检测 demo1 # 绘制几何图像的轮廓 import cv2img cv2.imread("./shape1.png")gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图像二值化 t, binary cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 检测图像中的所有轮廓 contours, hierarchy cv2.f…...

【C语言】字符函数和字符串函数

目录 1.求字符串长度strlen 2.长度不受限制的字符串函数 字符串拷贝strcpy 字符串追加strcat 字符串比较strcmp 3.长度受限制的字符串函数介绍strncpy strncat ​编辑strncmp 4.字符串查找strstr 5.字符串分割strtok 6.错误信息报告 strerror perror 7.字符分类函…...

前馈神经网络正则化例子

直接看代码&#xff1a; import torch import numpy as np import random from IPython import display from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms mnist_train torchvision.datasets.MNIST(root…...

spring的核心技术---bean的生命周期加案例分析详细易懂

目录 一.spring管理JavaBean的初始化过程&#xff08;生命周期&#xff09; Spring Bean的生命周期&#xff1a; 二.spring的JavaBean管理中单例模式及原型&#xff08;多例&#xff09;模式 2.1 . 默认为单例&#xff0c;但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2…...

【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~

Maven入门介绍篇 1️⃣ 基础概念1.1 构建1.2 maven对构建的支持1.3 Maven的其他作用 2️⃣ 其他构建工具2.1 IDE2.2 Make2.3 Ant2.4 Jenkins 3️⃣ Maven与敏捷开发&#x1f33e; 总结 1️⃣ 基础概念 "Maven"可以翻译为 “知识的积累者” 或 “专家”。这个词源于波…...

今天,谷歌Chrome浏览器部署抗量子密码

谷歌已开始部署混合密钥封装机制&#xff08;KEM&#xff09;&#xff0c;以保护在建立安全的 TLS 网络连接时共享对称加密机密。 8月10日&#xff0c;Chrome 浏览器安全技术项目经理Devon O’Brien解释说&#xff0c;从 8 月 15 日发布的 Chrome 浏览器 116 开始&#xff0c;谷…...

SUMO traci接口控制电动车前往充电站充电

首先需要创建带有停车位的充电站(停车场和充电站二合一)&#xff0c;具体参考我的专栏中其他文章。如果在仿真的某个时刻&#xff0c;希望能够控制电动车前往指定的充电站充电&#xff0c;并且在完成充电后继续前往车辆原来的目的地&#xff0c;那么可以使用以下API&#xff1a…...

现代CSS中的换行布局技术

在现代网页设计中&#xff0c;为了适应不同屏幕尺寸和设备类型&#xff0c;换行布局是一项重要的技术。通过合适的布局技术&#xff0c;我们可以实现内容的自适应和优雅的排版。本文将介绍CSS中几种常见的换行布局技术&#xff0c;探索它们的属性、代码示例和解析&#xff0c;帮…...

简单理解Python中的深拷贝与浅拷贝

I. 简介 深拷贝会递归的创建一个完全独立的对象副本&#xff0c;包括所有嵌套的对象&#xff0c;而浅拷贝只复制嵌套对象的引用&#xff0c;不复制嵌套对象本身。 简单来说就是两者都对原对象进行了复制&#xff0c;因此使用is运算符来比较新旧对象时&#xff0c;返回的都是F…...

AsyncAPI消息模式匹配:基于内容路由消息的终极指南

AsyncAPI消息模式匹配&#xff1a;基于内容路由消息的终极指南 【免费下载链接】spec The AsyncAPI specification allows you to create machine-readable definitions of your asynchronous APIs. 项目地址: https://gitcode.com/gh_mirrors/spec/spec AsyncAPI规范允…...

GG3M 元模型完整详解:从东方哲学数学化到文明级智慧操作系统

GG3M 元模型完整详解&#xff1a;从东方哲学数学化到文明级智慧操作系统摘要&#xff1a; GG3M 是全球首个以贾子理论&#xff08;Kucius Theory&#xff09;为核心、定位文明级智慧操作系统的 AGI 项目。其元模型&#xff08;Meta-Model&#xff09;以 3M 三层架构&#xff08…...

Ubuntu下基于simple-rtsp-server构建轻量级实时视频流媒体服务

1. 为什么选择simple-rtsp-server搭建流媒体服务 最近在给公司搭建内部监控系统时&#xff0c;我对比了市面上七八种RTSP服务器方案&#xff0c;最终选择了simple-rtsp-server。这个用纯C语言编写的轻量级服务器&#xff0c;编译后二进制文件只有几百KB&#xff0c;但性能却出乎…...

ESP32+LVGL实战:手把手教你搞定ST7789屏幕镜像显示(附完整代码)

ESP32LVGL实战&#xff1a;从寄存器到工程化配置&#xff0c;彻底解决ST7789屏幕镜像显示问题 当你用ESP32驱动ST7789屏幕时&#xff0c;是否遇到过图像上下左右颠倒的困扰&#xff1f;这个问题看似简单&#xff0c;但网上的零散教程往往只告诉你改某个寄存器值&#xff0c;却忽…...

【实战指南】Green Hills MULTI-IDE 从零安装到嵌入式开发环境搭建

1. Green Hills MULTI-IDE 初探&#xff1a;为什么选择它&#xff1f; 如果你正在寻找一款强大的嵌入式开发工具&#xff0c;Green Hills MULTI-IDE 绝对值得考虑。作为一个在嵌入式领域摸爬滚打多年的老手&#xff0c;我用过Keil、IAR等各种IDE&#xff0c;但MULTI-IDE给我的体…...

Mellanox ASAP2技术揭秘:如何通过硬件卸载提升OVS性能?

1. 为什么我们需要硬件卸载OVS&#xff1f; 在虚拟化环境中&#xff0c;Open vSwitch&#xff08;OVS&#xff09;就像是一个交通警察&#xff0c;负责指挥虚拟机之间的网络流量。但问题在于&#xff0c;这个"警察"一直靠软件在CPU上干活。想象一下&#xff0c;早高…...

Unity游戏模组加载效率提升指南:从零开始掌握MelonLoader

Unity游戏模组加载效率提升指南&#xff1a;从零开始掌握MelonLoader 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 一、问题引…...

OpenClaw+GLM-4.7-Flash:个人博客自动更新系统搭建

OpenClawGLM-4.7-Flash&#xff1a;个人博客自动更新系统搭建 1. 为什么需要自动化博客维护 作为一个技术博主&#xff0c;我每周至少要花3-4小时在博客维护上&#xff1a;构思主题、撰写内容、调整格式、发布更新。最痛苦的不是写作本身&#xff0c;而是那些重复性的机械工作…...

GLM-OCR性能基准测试报告:对比不同GPU型号上的推理速度与成本

GLM-OCR性能基准测试报告&#xff1a;对比不同GPU型号上的推理速度与成本 最近在做一个文档数字化的项目&#xff0c;需要处理大量扫描件和图片里的文字。选型的时候&#xff0c;自然就盯上了各种OCR模型。GLM-OCR作为国产大模型阵营里的一员&#xff0c;表现一直挺亮眼&#…...

离散状态观测器

-伺服&#xff08;实用&#xff09;A川伺服--模型追踪控制&#xff08;末端低频振动抑制-pmsm 完全自己搭建&#xff0c;原理清晰&#xff0c;效果可靠&#xff0c;可实际验证包含: &#xff08;1&#xff09;详细原理性推导 &#xff08;2&#xff09;仿真基于离散化模型以及离…...