C

QAndroidNotificationListener Class

A class that allows listening for posted notifications on Android devices. It utilizes Android's NotificationListenerService to receive information about notifications that are posted or removed. More...

Header: #include <QAndroidNotificationListener>
CMake: find_package(Qt6 REQUIRED COMPONENTS AndroidAutomotiveBase)
target_link_libraries(mytarget PRIVATE Qt6::AndroidAutomotiveBase)
Since: Qt 6.4
Inherits: QObject

Public Functions

QList<QAndroidNotificationItem *> getActiveNotifications()
QAndroidNotificationItem *getNotification(const QString &key)
bool hasNotificationAccess()
bool isConnected()
void requestNotificationAccess()
void start()
void stop()

Public Slots

void dismissNotification(const QString &key) const
void launchContentIntent(const QString &key) const
void snoozeNotification(const QString &key, long duration) const

Signals

void connectedChanged(bool connected)
void notificationAccessChanged(bool isAccessGranted)
void notificationPosted(QAndroidNotificationItem *notification)
void notificationRemoved(const QString &key)

Static Public Members

QAndroidNotificationListener *instance()

Detailed Description

Modifying the manifest

To enable the notifications listener service, the service will need to be declared in the app's AndroidManifest.xml:

<service
    android:name="io.qt.androidautomotive.androidnotificationslistener.QtNotificationListener"
    android:enabled="true"
    android:exported="true"
    android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>

This is necessary to make the app visible as a notification listener in the Android settings page, otherwise it cannot be granted access to notifications from it.

Notifications Listener known issues and limitations

Checking whether access to notifications has been granted requires Android API 27 or higher to work properly.

Member Function Documentation

[signal] void QAndroidNotificationListener::connectedChanged(bool connected)

This signal is emitted when the listener is ready to use and has connected to Android's notification service, or the listener has disconnected from Android's notification service. Once this signal is emitted with a false value of connected, only QAndroidNotificationListener::start() should be called until QAndroidNotificationListener::isConnected() is true. Trying to invoke other methods will not yield expected results.

See also isConnected().

[slot] void QAndroidNotificationListener::dismissNotification(const QString &key) const

Dismisses the notification with the given key, if one is currently active and is clearable.

QList<QAndroidNotificationItem *> QAndroidNotificationListener::getActiveNotifications()

Returns a list of active notifications. Ownership of the returned notifications is not transferred, and any held reference to a returned notification should be cleared when notificationRemoved(const QString &key) is emitted with the matching key.

See also notificationRemoved().

QAndroidNotificationItem *QAndroidNotificationListener::getNotification(const QString &key)

Returns the notification with the matching key, or nullptr if one does not exist. Ownership is not transferred, and any held reference to the returned notification should be cleared when notificationRemoved(const QString &key) is emitted with the matching key.

See also notificationRemoved().

bool QAndroidNotificationListener::hasNotificationAccess()

Checks whether access rights to listen for notifications has been granted. Returns true if the access has been granted, false if not.

Note: Due to used underlying Android API, this method can only check for notification access when the Android API level used is 27 (Android 8.1) or higher. If using a lower API level, the method always return true, meaning QAndroidNotificationListener will not handle requesting access by itself. Instead, you need to handle the access request by yourself, for example by calling requestNotificationListenerAccess().

[static] QAndroidNotificationListener *QAndroidNotificationListener::instance()

Returns a pointer to the singleton instance.

bool QAndroidNotificationListener::isConnected()

Returns whether the listener is connected to Android's notification service and is ready to use.

Note: Due to the underlying implementation of Android's notification listener service, the only functionality that is available before the listener has successfully connected is start(). Using other functions while this method returns false will not result in the expected behavior, for example getActiveNotifications() will always return an empty list. For this reason it is recommended to check that this method returns true before trying to access other functionalities, and if false is returned to wait for the connected() signal to be emitted.

See also connectedChanged().

[slot] void QAndroidNotificationListener::launchContentIntent(const QString &key) const

Sends the contentIntent of a notification with the matching key. Calling this function has no effect if the notification does not have a valid contentIntent.

See also QAndroidNotificationItem::performContentAction().

[signal] void QAndroidNotificationListener::notificationAccessChanged(bool isAccessGranted)

This signal is emitted when the access rights for listening on notifications, isAccessGranted , have changed.

See also hasNotificationAccess() and requestNotificationAccess().

[signal] void QAndroidNotificationListener::notificationPosted(QAndroidNotificationItem *notification)

This signal is emitted when a new notification has been posted.

[signal] void QAndroidNotificationListener::notificationRemoved(const QString &key)

This signal is emitted when the notification with the given key has been removed. The corresponding QAndroidNotificationItem will be deleted, and any held references to it should be cleared when this signal is emitted.

void QAndroidNotificationListener::requestNotificationAccess()

Opens up the settings view for granting access to notifications.

[slot] void QAndroidNotificationListener::snoozeNotification(const QString &key, long duration) const

Snoozes the notification with the matching key for the duration in milliseconds. This will lead to the snoozed notification being removed, and posted again after duration has passed. notificationRemoved(const QString& key) and notificationPosted(QAndroidNotificationItem* notification) will be emitted at these times, just like when a notification is removed or posted normally.

void QAndroidNotificationListener::start()

Requests that the notification listener service be started and bound. If notification access hasn't been granted, binding the service will not succeed. If this method is called and the access hasn't been granted, the app notifications access settings view is opened.

Typically, this only needs to be called if stop() has been called, or if access to notifications has not yet been granted. Android will start the service without the need to call this method, but only if the access has been granted.

See also stop() and isConnected().

void QAndroidNotificationListener::stop()

Stops listening for notifications, unbinding the service.

See also start().

Available under certain Qt licenses.
Find out more.