kotlin一次通过jni调用C++侧,然后C++侧多次回传数据
让C++通过JNI来callback回调kotlin侧代码
1. 定义Kotlin接口
在Kotlin中定义一个用于接收C++回调的接口:
interface DataCallback {
fun onDataReceived(data: String)
}
2. 定义C++侧的JNI方法
在C++侧,实现接收指令和回调对象的JNI方法,并存储回调对象的引用以便后续调用。
#include <jni.h>
#include <string>
#include <thread>
#include <chrono>
JavaVM* javaVM;
jobject globalCallbackRef;
// 初始化全局Java VM
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
javaVM = vm;
return JNI_VERSION_1_6;
}
extern "C"
JNIEXPORT void JNICALL
Java_com_example_yourapp_MainActivity_sendCommand(JNIEnv* env, jobject obj, jstring command, jobject callback) {
// 保存全局回调对象引用
globalCallbackRef = env->NewGlobalRef(callback);
// 将jstring转换为C++字符串
const char* commandStr = env->GetStringUTFChars(command, nullptr);
std::string cmd