-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathandroidnotificationreceiver.cpp
More file actions
72 lines (60 loc) · 2.47 KB
/
Copy pathandroidnotificationreceiver.cpp
File metadata and controls
72 lines (60 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <QDebug>
#include "notificationreceiver.h"
#include "androidnotificationreceiver.h"
Q_GLOBAL_STATIC(AndroidNotificationReceiver, androidReceiver)
AndroidNotificationReceiver::AndroidNotificationReceiver() :
m_receiver(0)
{
JNINativeMethod methods[] {
{"handleRegisterId", "(Ljava/lang/String;)V", reinterpret_cast<void *>(&AndroidNotificationReceiver::registrationIdHandler)},
{"handleRegisterError", "(Ljava/lang/String;)V", reinterpret_cast<void *>(&AndroidNotificationReceiver::registrationIdHandler)}
};
const char *className = "com/cutehacks/examples/qtgcm/RegisterTask";
if (QAndroidJniObject::isClassAvailable(className)) {
QAndroidJniObject javaClass(className);
if (javaClass.isValid()) {
QAndroidJniEnvironment env;
jclass objectClass = env->GetObjectClass(javaClass.object<jobject>());
env->RegisterNatives(objectClass,
methods,
sizeof(methods) / sizeof(methods[0]));
env->DeleteLocalRef(objectClass);
} else {
qDebug() << className << "is not valid";
}
} else {
qDebug() << className << "is not available";
}
}
AndroidNotificationReceiver::~AndroidNotificationReceiver()
{
}
void AndroidNotificationReceiver::doRegister(NotificationReceiver *receiver, const QString &senderId)
{
m_receiver = receiver;
QAndroidJniObject jSenderId = QAndroidJniObject::fromString(senderId);
QAndroidJniObject foo = QAndroidJniObject::callStaticObjectMethod(
"com/cutehacks/examples/qtgcm/MainActivity",
"registerGCM",
"(Ljava/lang/String;)V",
jSenderId.object<jstring>());
}
AndroidNotificationReceiver *AndroidNotificationReceiver::instance()
{
return androidReceiver;
}
void AndroidNotificationReceiver::registrationIdHandler(JNIEnv *env, jobject thiz, jstring registrationId)
{
Q_UNUSED(thiz)
const char* nativeString = env->GetStringUTFChars(registrationId, 0);
QString str = QString::fromUtf8(nativeString);
env->ReleaseStringUTFChars(registrationId, nativeString);
androidReceiver->m_receiver->setGcmRegistrationId(str);
}
void AndroidNotificationReceiver::errorHandler(JNIEnv *env, jobject thiz, jstring errorMessage)
{
Q_UNUSED(thiz)
const char* nativeString = env->GetStringUTFChars(errorMessage, 0);
qWarning(nativeString);
env->ReleaseStringUTFChars(errorMessage, nativeString);
}