diff options
Diffstat (limited to 'examples/corelib/platform/androidnotifier/notificationclient.cpp')
-rw-r--r-- | examples/corelib/platform/androidnotifier/notificationclient.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/examples/corelib/platform/androidnotifier/notificationclient.cpp b/examples/corelib/platform/androidnotifier/notificationclient.cpp new file mode 100644 index 0000000000..aa6093c29c --- /dev/null +++ b/examples/corelib/platform/androidnotifier/notificationclient.cpp @@ -0,0 +1,55 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include "notificationclient.h" + +#include <QtCore/qjniobject.h> +#include <QtCore/qcoreapplication.h> +#include <QtCore/private/qandroidextras_p.h> + +using namespace Qt::StringLiterals; + +NotificationClient::NotificationClient(QObject *parent) + : QObject(parent) +{ + if (QNativeInterface::QAndroidApplication::sdkVersion() >= __ANDROID_API_T__) { + const auto notificationPermission = "android.permission.POST_NOTIFICATIONS"_L1; + auto requestResult = QtAndroidPrivate::requestPermission(notificationPermission); + if (requestResult.result() != QtAndroidPrivate::Authorized) { + qWarning() << "Failed to acquire permission to post notifications " + "(required for Android 13+)"; + } + } + + connect(this, &NotificationClient::notificationChanged, + this, &NotificationClient::updateAndroidNotification); +} + +void NotificationClient::setNotification(const QString ¬ification) +{ + if (m_notification == notification) + return; + +//! [notification changed signal] + m_notification = notification; + emit notificationChanged(); +//! [notification changed signal] +} + +QString NotificationClient::notification() const +{ + return m_notification; +} + +//! [Send notification message to Java] +void NotificationClient::updateAndroidNotification() +{ + QJniObject javaNotification = QJniObject::fromString(m_notification); + QJniObject::callStaticMethod<void>( + "org/qtproject/example/androidnotifier/NotificationClient", + "notify", + "(Landroid/content/Context;Ljava/lang/String;)V", + QNativeInterface::QAndroidApplication::context(), + javaNotification.object<jstring>()); +} +//! [Send notification message to Java] |