diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2014-11-21 16:12:18 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2014-11-21 16:12:18 +0100 |
commit | 1b8225028d3e18ed912f41944e7a60679e3a5142 (patch) | |
tree | 498fcc2052a0b29714082f698dc2efbfdf134778 | |
parent | ddea472c69083c7ddee07d4512b70fe58a27ad23 (diff) | |
parent | efabc3f1c4cff9158924d4c3721470d82ea89ec9 (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Change-Id: Ie41284439a6f89e231837e2e50d1624c3cf7f37f
-rw-r--r-- | examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc | 54 | ||||
-rw-r--r-- | src/androidextras/jni/qandroidjniobject.cpp | 74 |
2 files changed, 92 insertions, 36 deletions
diff --git a/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc b/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc index d499e62..991abbe 100644 --- a/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc +++ b/examples/androidextras/notification/doc/src/qtandroidextras-example-notification.qdoc @@ -35,11 +35,65 @@ This example demonstrates how to add a custom Java class to an Android application, and how to call into this using the JNI convenience APIs in the Qt Android Extras module. + The application UI is created by using Qt Quick. Click on either of the smiley faces to put a notification in the status area of the Android device. \include examples-run.qdocinc + \section1 Calling Java Methods from C++ Code + + We define a custom Java class called \c NotificationClient in the + NotificationClient.java file: + + \quotefromfile notification/android-sources/src/org/qtproject/example/notification/NotificationClient.java + \skipto org.qtproject.example.notification + \printuntil /^\}/ + + In the NotificationClient C++ class header file, notificationclient.h, we + declare a simple C++ API to display notifications on an Android device. It + consists of a single string property, \c notification, and a slot, + \c updateAndroidNotification(), that calls the Java code: + + \quotefromfile notification/notificationclient.h + \skipto Q_PROPERTY + \printuntil ) + \dots + \skipto private slots + \printuntil updateAndroidNotification() + + A NotificationClient object is exposed to the QML in the main source file, + main.cpp: + + \quotefromfile notification/main.cpp + \skipto QQuickView view; + \printuntil notificationClient); + + In the NotificationClient C++ class source file, notificationclient.cpp, we + import the QtAndroidJniObject class to be able to use its functions: + + \quotefromfile notification/notificationclient.cpp + \skipto QAndroidJniObject + \printuntil > + + We connect the \c notificationChanged() signal to the + \c updateAndroidNotification() slot to update the notification text when the + \c notification property changes: + + \printuntil } + + The \c NotificationClient::updateAndroidNotification() function calls the + Java method. We construct a Java string from the \c notification string + property: + + \skipto updateAndroidNotification() + \printuntil fromString + + And pass the string object as a parameter to the Java \c notify() method. + Note that we must supply the signature ourselves: + + \printuntil } + \sa {Qt for Android}, {Qt Android Extras} */ diff --git a/src/androidextras/jni/qandroidjniobject.cpp b/src/androidextras/jni/qandroidjniobject.cpp index 69ceeb3..21c2c73 100644 --- a/src/androidextras/jni/qandroidjniobject.cpp +++ b/src/androidextras/jni/qandroidjniobject.cpp @@ -286,7 +286,7 @@ QT_BEGIN_NAMESPACE and arguments. \code - jclass myClass = ...; + jclass myClazz = ...; QAndroidJniObject::QAndroidJniObject(myClazz, "(I)V", 3); \endcode */ @@ -339,7 +339,7 @@ QT_BEGIN_NAMESPACE \code ... QAndroidJniObject myJavaString1 = ...; - QAndroidJniObject myJavaString2 = myJavaString.callObjectMethod<jstring>("toString"); + QAndroidJniObject myJavaString2 = myJavaString1.callObjectMethod<jstring>("toString"); ... \endcode */ @@ -447,8 +447,8 @@ QT_BEGIN_NAMESPACE Retrieves the value of the field \a fieldName. \code - QAndroidJniObject volumeControll = ...; - jint fieldValue = obj.getField<jint>("MAX_VOLUME"); + QAndroidJniObject volumeControl = ...; + jint fieldValue = volumeControl.getField<jint>("MAX_VOLUME"); \endcode */ @@ -716,16 +716,18 @@ QT_BEGIN_NAMESPACE QAndroidJniObject::QAndroidJniObject(const char *className, const char *sig, ...) { va_list args; + QJNIObjectPrivate::QVaListPrivate vargs = { args }; va_start(args, sig); - d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(className, sig, args)); + d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(className, sig, vargs)); va_end(args); } QAndroidJniObject::QAndroidJniObject(jclass clazz, const char *sig, ...) { va_list args; + QJNIObjectPrivate::QVaListPrivate vargs = { args }; va_start(args, sig); - d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(clazz, sig, args)); + d = QSharedPointer<QJNIObjectPrivate>(new QJNIObjectPrivate(clazz, sig, vargs)); va_end(args); } @@ -757,7 +759,7 @@ void QAndroidJniObject::callMethod<void>(const char *methodName, const char *sig { va_list args; va_start(args, sig); - d->callMethod<void>(methodName, sig, args); + d->callMethodV<void>(methodName, sig, args); va_end(args); } @@ -766,7 +768,7 @@ jboolean QAndroidJniObject::callMethod<jboolean>(const char *methodName, const c { va_list args; va_start(args, sig); - jboolean res = d->callMethod<jboolean>(methodName, sig, args); + jboolean res = d->callMethodV<jboolean>(methodName, sig, args); va_end(args); return res; } @@ -776,7 +778,7 @@ jbyte QAndroidJniObject::callMethod<jbyte>(const char *methodName, const char *s { va_list args; va_start(args, sig); - jbyte res = d->callMethod<jbyte>(methodName, sig, args); + jbyte res = d->callMethodV<jbyte>(methodName, sig, args); va_end(args); return res; } @@ -786,7 +788,7 @@ jchar QAndroidJniObject::callMethod<jchar>(const char *methodName, const char *s { va_list args; va_start(args, sig); - jchar res = d->callMethod<jchar>(methodName, sig, args); + jchar res = d->callMethodV<jchar>(methodName, sig, args); va_end(args); return res; } @@ -796,7 +798,7 @@ jshort QAndroidJniObject::callMethod<jshort>(const char *methodName, const char { va_list args; va_start(args, sig); - jshort res = d->callMethod<jshort>(methodName, sig, args); + jshort res = d->callMethodV<jshort>(methodName, sig, args); va_end(args); return res; } @@ -806,7 +808,7 @@ jint QAndroidJniObject::callMethod<jint>(const char *methodName, const char *sig { va_list args; va_start(args, sig); - jint res = d->callMethod<jint>(methodName, sig, args); + jint res = d->callMethodV<jint>(methodName, sig, args); va_end(args); return res; } @@ -816,7 +818,7 @@ jlong QAndroidJniObject::callMethod<jlong>(const char *methodName, const char *s { va_list args; va_start(args, sig); - jlong res = d->callMethod<jlong>(methodName, sig, args); + jlong res = d->callMethodV<jlong>(methodName, sig, args); va_end(args); return res; } @@ -826,7 +828,7 @@ jfloat QAndroidJniObject::callMethod<jfloat>(const char *methodName, const char { va_list args; va_start(args, sig); - jfloat res = d->callMethod<jfloat>(methodName, sig, args); + jfloat res = d->callMethodV<jfloat>(methodName, sig, args); va_end(args); return res; } @@ -836,7 +838,7 @@ jdouble QAndroidJniObject::callMethod<jdouble>(const char *methodName, const cha { va_list args; va_start(args, sig); - jdouble res = d->callMethod<jdouble>(methodName, sig, args); + jdouble res = d->callMethodV<jdouble>(methodName, sig, args); va_end(args); return res; } @@ -847,7 +849,7 @@ QAndroidJniObject QAndroidJniObject::callObjectMethod(const char *methodName, { va_list args; va_start(args, sig); - QJNIObjectPrivate res = d->callObjectMethod(methodName, sig, args); + QJNIObjectPrivate res = d->callObjectMethodV(methodName, sig, args); va_end(args); return res; } @@ -962,7 +964,7 @@ void QAndroidJniObject::callStaticMethod<void>(const char *className, { va_list args; va_start(args, sig); - QJNIObjectPrivate::callStaticMethod<void>(className, methodName, sig, args); + QJNIObjectPrivate::callStaticMethodV<void>(className, methodName, sig, args); va_end(args); } @@ -974,7 +976,7 @@ void QAndroidJniObject::callStaticMethod<void>(jclass clazz, { va_list args; va_start(args, sig); - QJNIObjectPrivate::callStaticMethod<void>(clazz, methodName, sig, args); + QJNIObjectPrivate::callStaticMethodV<void>(clazz, methodName, sig, args); va_end(args); } @@ -986,7 +988,7 @@ jboolean QAndroidJniObject::callStaticMethod<jboolean>(const char *className, { va_list args; va_start(args, sig); - jboolean res = QJNIObjectPrivate::callStaticMethod<jboolean>(className, methodName, sig, args); + jboolean res = QJNIObjectPrivate::callStaticMethodV<jboolean>(className, methodName, sig, args); va_end(args); return res; } @@ -999,7 +1001,7 @@ jboolean QAndroidJniObject::callStaticMethod<jboolean>(jclass clazz, { va_list args; va_start(args, sig); - jboolean res = QJNIObjectPrivate::callStaticMethod<jboolean>(clazz, methodName, sig, args); + jboolean res = QJNIObjectPrivate::callStaticMethodV<jboolean>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1012,7 +1014,7 @@ jbyte QAndroidJniObject::callStaticMethod<jbyte>(const char *className, { va_list args; va_start(args, sig); - jbyte res = QJNIObjectPrivate::callStaticMethod<jbyte>(className, methodName, sig, args); + jbyte res = QJNIObjectPrivate::callStaticMethodV<jbyte>(className, methodName, sig, args); va_end(args); return res; } @@ -1025,7 +1027,7 @@ jbyte QAndroidJniObject::callStaticMethod<jbyte>(jclass clazz, { va_list args; va_start(args, sig); - jbyte res = QJNIObjectPrivate::callStaticMethod<jbyte>(clazz, methodName, sig, args); + jbyte res = QJNIObjectPrivate::callStaticMethodV<jbyte>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1038,7 +1040,7 @@ jchar QAndroidJniObject::callStaticMethod<jchar>(const char *className, { va_list args; va_start(args, sig); - jchar res = QJNIObjectPrivate::callStaticMethod<jchar>(className, methodName, sig, args); + jchar res = QJNIObjectPrivate::callStaticMethodV<jchar>(className, methodName, sig, args); va_end(args); return res; } @@ -1051,7 +1053,7 @@ jchar QAndroidJniObject::callStaticMethod<jchar>(jclass clazz, { va_list args; va_start(args, sig); - jchar res = QJNIObjectPrivate::callStaticMethod<jchar>(clazz, methodName, sig, args); + jchar res = QJNIObjectPrivate::callStaticMethodV<jchar>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1065,7 +1067,7 @@ jshort QAndroidJniObject::callStaticMethod<jshort>(const char *className, { va_list args; va_start(args, sig); - jshort res = QJNIObjectPrivate::callStaticMethod<jshort>(className, methodName, sig, args); + jshort res = QJNIObjectPrivate::callStaticMethodV<jshort>(className, methodName, sig, args); va_end(args); return res; } @@ -1078,7 +1080,7 @@ jshort QAndroidJniObject::callStaticMethod<jshort>(jclass clazz, { va_list args; va_start(args, sig); - jshort res = QJNIObjectPrivate::callStaticMethod<jshort>(clazz, methodName, sig, args); + jshort res = QJNIObjectPrivate::callStaticMethodV<jshort>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1091,7 +1093,7 @@ jint QAndroidJniObject::callStaticMethod<jint>(const char *className, { va_list args; va_start(args, sig); - jint res = QJNIObjectPrivate::callStaticMethod<jint>(className, methodName, sig, args); + jint res = QJNIObjectPrivate::callStaticMethodV<jint>(className, methodName, sig, args); va_end(args); return res; } @@ -1104,7 +1106,7 @@ jint QAndroidJniObject::callStaticMethod<jint>(jclass clazz, { va_list args; va_start(args, sig); - jint res = QJNIObjectPrivate::callStaticMethod<jint>(clazz, methodName, sig, args); + jint res = QJNIObjectPrivate::callStaticMethodV<jint>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1117,7 +1119,7 @@ jlong QAndroidJniObject::callStaticMethod<jlong>(const char *className, { va_list args; va_start(args, sig); - jlong res = QJNIObjectPrivate::callStaticMethod<jlong>(className, methodName, sig, args); + jlong res = QJNIObjectPrivate::callStaticMethodV<jlong>(className, methodName, sig, args); va_end(args); return res; } @@ -1130,7 +1132,7 @@ jlong QAndroidJniObject::callStaticMethod<jlong>(jclass clazz, { va_list args; va_start(args, sig); - jlong res = QJNIObjectPrivate::callStaticMethod<jlong>(clazz, methodName, sig, args); + jlong res = QJNIObjectPrivate::callStaticMethodV<jlong>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1143,7 +1145,7 @@ jfloat QAndroidJniObject::callStaticMethod<jfloat>(const char *className, { va_list args; va_start(args, sig); - jfloat res = QJNIObjectPrivate::callStaticMethod<jfloat>(className, methodName, sig, args); + jfloat res = QJNIObjectPrivate::callStaticMethodV<jfloat>(className, methodName, sig, args); va_end(args); return res; } @@ -1156,7 +1158,7 @@ jfloat QAndroidJniObject::callStaticMethod<jfloat>(jclass clazz, { va_list args; va_start(args, sig); - jfloat res = QJNIObjectPrivate::callStaticMethod<jfloat>(clazz, methodName, sig, args); + jfloat res = QJNIObjectPrivate::callStaticMethodV<jfloat>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1169,7 +1171,7 @@ jdouble QAndroidJniObject::callStaticMethod<jdouble>(const char *className, { va_list args; va_start(args, sig); - jdouble res = QJNIObjectPrivate::callStaticMethod<jdouble>(className, methodName, sig, args); + jdouble res = QJNIObjectPrivate::callStaticMethodV<jdouble>(className, methodName, sig, args); va_end(args); return res; } @@ -1182,7 +1184,7 @@ jdouble QAndroidJniObject::callStaticMethod<jdouble>(jclass clazz, { va_list args; va_start(args, sig); - jdouble res = QJNIObjectPrivate::callStaticMethod<jdouble>(clazz, methodName, sig, args); + jdouble res = QJNIObjectPrivate::callStaticMethodV<jdouble>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1194,7 +1196,7 @@ QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(const char *classNam { va_list args; va_start(args, sig); - QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethod(className, + QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethodV(className, methodName, sig, args); @@ -1209,7 +1211,7 @@ QAndroidJniObject QAndroidJniObject::callStaticObjectMethod(jclass clazz, { va_list args; va_start(args, sig); - QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethod(clazz, methodName, sig, args); + QJNIObjectPrivate res = QJNIObjectPrivate::callStaticObjectMethodV(clazz, methodName, sig, args); va_end(args); return res; } |