Notificador Qt para Android
Demuestra cómo llamar a código Java desde Qt en una aplicación Android.

Este ejemplo demuestra cómo añadir una clase Java personalizada a una aplicación Android, y cómo llamarla utilizando las APIs de conveniencia JNI en Qt.
Haga clic en una de las caras sonrientes para enviar una notificación en la barra de estado de la pantalla de Android.
Ejecutar el ejemplo
Para ejecutar el ejemplo desde Qt Creatorabra el modo Welcome y seleccione el ejemplo de Examples. Para más información, consulta Qt Creator: Tutorial: Construir y ejecutar.
Llamada a métodos Java desde código C
Definimos una clase Java personalizada llamada NotificationClient en el archivo NotificationClient.java:
package org.qtproject.example.androidnotifier;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.BitmapFactory;
import android.app.NotificationChannel;
public class NotificationClient
{
public static void notify(Context context, String message) {
try {
NotificationManager m_notificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder m_builder;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel notificationChannel;
notificationChannel = new NotificationChannel("Qt", "Qt Notifier", importance);
m_notificationManager.createNotificationChannel(notificationChannel);
m_builder = new Notification.Builder(context, notificationChannel.getId());
} else {
m_builder = new Notification.Builder(context);
}
Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon);
m_builder.setSmallIcon(R.drawable.icon)
.setLargeIcon(icon)
.setContentTitle("A message from Qt!")
.setContentText(message)
.setDefaults(Notification.DEFAULT_SOUND)
.setColor(Color.GREEN)
.setAutoCancel(true);
m_notificationManager.notify(0, m_builder.build());
} catch (Exception e) {
e.printStackTrace();
}
}
}En el archivo de cabecera de la clase C++ NotificationClient, notificationclient.h, declaramos una API C++ sencilla para mostrar notificaciones en un dispositivo Android. Consiste en una única propiedad de cadena, notification, y una ranura, updateAndroidNotification(), que llama al código Java:
class NotificationClient : public QObject { Q_OBJECT public: explicit NotificationClient(QObject *parent = 0); void setNotification(const QString ¬ification); QString notification() const; signals: void notificationChanged(); private slots: void updateAndroidNotification(); private: QString m_notification; };
Conectamos la señal notificationChanged() a la ranura updateAndroidNotification() para actualizar el texto de la notificación cuando cambia el texto notification:
m_notification = notification; emit notificationChanged();
La función updateAndroidNotification() llama al método Java responsable de enviar la notificación desde las API de la plataforma Android. En primer lugar, construimos una cadena Java jstring a partir de la cadena de notificación y, a continuación, pasamos el objeto jstring como parámetro al método notify() en 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>()); }
La llamada al meethod de Java utiliza QJniObject, que se basa en las API de la interfaz nativa de Java (JNI) para comunicarse con Java. Además, en el fragmento anterior, estamos pasando el objeto de contexto de la aplicación, que el código Java estático puede utilizar para acceder a las propiedades y API específicas de la aplicación.
Para asegurarnos de que nuestros botones sonrientes hacen lo que se supone que deben hacer, añadimos el siguiente código para cambiar el texto de notificación si se hace clic en cualquiera de ellos:
QObject::connect(&happyButton, &QPushButton::clicked, &happyButton, []() { NotificationClient().setNotification("The user is happy!"); }); QObject::connect(&sadButton, &QPushButton::clicked, &happyButton, []() { NotificationClient().setNotification("The user is sad!"); });
Véase también Qt para Android.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.