Подребовалось мне из Java класса вызвать функцию, наподобии этой:
public int send(byte[] data)
{
....
}
Ну а что бы её вызвать из C++ нужно было преобразовать QByteArray в jbytearray делается это так:
jbyteArray QByteArray2jbyteArray(QByteArray buf)
{
QAndroidJniEnvironment env;
jbyteArray array = env->NewByteArray(buf.length());
env->SetByteArrayRegion (array, 0, buf.length(), reinterpret_cast<jbyte*>(buf.data()));
return array;
}
если нужно обратное преобразование, то делается так:
QByteArray jbyteArray2QByteArray(jbyteArray buf)
{
QAndroidJniEnvironment env;
int len = env->GetArrayLength(buf);
QByteArray array;
array.resize(len);
env->GetByteArrayRegion (buf, 0, len, reinterpret_cast<jbyte*>(array.data()));
return array;
}
ну а саму функцию из Java класса с помощью JNI можно вызвать так:
QAndroidJniObject myActivity= QtAndroid::androidActivity();
myActivity.callMethod<int>("send", "([B)I", QByteArray2jbytearray(myByteArray));
Если нужно наоборот вернуть из функции jbytearray, то тут немного по сложнее:
QAndroidJniObject myActivity= QtAndroid::androidActivity();
QAndroidJniObject readData = myActivity.callObjectMethod("read", "(V)[B");
jbyteArray array =readData.object<jbyteArray>();
Кстати, не забываем подключать заголовочники:
#include <QtAndroid>
#include <QAndroidJniEnvironment>
#include <QAndroidJniObject>
И в *.pro файле добавлять
QT += androidextras
Вот как то так =)