0

在我的 Qt 应用程序中,如果我的 MainActivity 类中有一个用 Java 编写的方法,如下所示,

public Boolean myJavaTestMethod() {
    return true;
}

我知道我可以通过以下方式调用该方法:

QAndroidJniObject method_retval = QtAndroid::androidActivity().callObjectMethod<jboolean>("myJavaTestMethod");

问题:
上面很好,而且有效。但是,如何将字符串从 Qt C++ 端传递到myJavaTestMethod?

假设我想调用下面的方法,该方法将输入参数String放入其中

public Boolean myJavaTestMethodWithParam(String str) {
    return true;
}

环境:
我使用的是Qt 5.15.1商业版。

4

1 回答 1

1

您必须采取以下步骤:

  1. 使用 name 和 调用 Java 对象的函数signature
QAndroidJniObject result = activity.callObjectMethod("myJavaTestMethodWithParam", "(Ljava/lang/String;)B", myJString);

返回的activity内容在哪里,您的活动功能 是它的签名。QtAndroid::androidActivity()myJavaTestMethodWithParam"(Ljava/lang/String;)B"

  1. 把你的 QString 变成一个 jstring:
QString helloString("Hello");

QAndroidJniObject string = QAndroidJniObject::fromString(helloString);
jstring myJString = string.object<jstring>();

要了解该signature部分,请查看:https ://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16432

更多关于在这里调用 Android/Java 方法:https ://doc.qt.io/qt-5/qandroidjniobject.html#callObjectMethod-1

于 2021-12-06T20:47:50.167 回答