gpt4 book ai didi

Android:将数据从 jni 线程传递到 java 程序

转载 作者:行者123 更新时间:2023-11-29 01:59:47 26 4
gpt4 key购买 nike

我正在开发一个 jni-client-software,它应该与服务器通信。我可以建立连接,可以读出我需要的信息并将其返回给我的 java 程序。现在我想无限连接,这意味着连接已经建立并且应该在无限循环中读出信息(我不想断开连接并重新连接每个 jni 函数调用)。是否可以将字节数组从工作的 jni 程序传递到我的 java 程序?

非常感谢。

亲切的问候

托马斯

最佳答案

“是否可以将字节数组从工作中的 jni 程序传递到我的 java 程序?”

您可以在您的一个 java 类中创建静态方法,然后在 jni 代码中使用参数调用该方法。这是一些代码:

Java 端:

package com.mysuper.game;
public class MyApp {
public static void callMeFromJNI(byte[] data) {
// ...
}
}

和 C++ 代码在工作线程上运行:

JavaVM *vm;
// use vm->AttachCurrentThread(&env, 0); in thread function to get valid JNI interface pointer, on thread end use DetachCurrentThread().
JNIEnv *env;

void myFunc() {

// some test data to send
const int len = 32;
char data[len] = {0,1,2,3,4};

jclass app = env->FindClass("com/mysuper/game/MyApp");
jmethodID sendDataToJava = env->GetStaticMethodID(app, "callMeFromJNI", "([B)V");
jbyteArray bArray = env->NewByteArray(len);
char *bytes = (char *)env->GetByteArrayElements(bArray, 0);
memcpy( bytes, data, len);
env->ReleaseByteArrayElements(bArray, bytes, JNI_ABORT);
env->CallStaticVoidMethod(app, sendDataToJava, bArray);
}

有关其工作原理的更多信息,请查看:

Java Native Interface 6.0 Specification

关于Android:将数据从 jni 线程传递到 java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com