Пробовал это:
void sendInfo(std::byte* something, long dataSize) {
JavaVM* vm = nsCtx.javaVM;
JNIEnv* env;
int envState = getEnvState(&env, vm);
if (envState == JNI_OK || envState == JNI_EDETACHED) {
LOGD("Environment received successfully");
jbyteArray byteArray;
if(!byteArray)
byteArray = env->NewByteArray(dataSize);
if(env->GetArrayLength(byteArray) != dataSize)
{
env->DeleteLocalRef(byteArray);
byteArray = env->NewByteArray(dataSize);
}
LOGD("byte array is created");
void *temp = env->GetPrimitiveArrayCritical((jarray)byteArray, 0);
LOGD("Worked fine");
memcpy(temp, something, dataSize);
env->ReleasePrimitiveArrayCritical(byteArray, temp, 0);
jmethodID SendFunc = env->GetMethodID(someClass, "something",
"([B)V");
// Call the method on the object
env->CallVoidMethod(someObject, SendFunc, byteArray);
if (env->ExceptionCheck()) {
env->ExceptionDescribe();
}
//if thread was attached to it, detach it
if(envState == JNI_EDETACHED) {
vm->DetachCurrentThread();
LOGD("Thread detached");
}
} else {
//Returns JNI_ERR
LOGD("JNI ERROR occurred");
}
}
Java подпись функции:
public void getbyteArrays(byte[] someArray);
, но с некоторыми ошибками DALVIk. Может кто-нибудь объяснить, как передать std :: byte * в Java в виде массива byte [] в функции java. Я совершенно не знаком с этой концепцией и не могу заставить ее работать.