C

QAndroidNotificationListener 类

一个允许监听 Android 设备上发布通知的类。它利用 Android 的 NotificationListenerService 来接收有关发布或删除的通知信息。更多...

头文件 #include <QAndroidNotificationListener>
CMake find_package(Qt6 REQUIRED COMPONENTS AndroidAutomotiveBase)
target_link_libraries(mytarget PRIVATE Qt6::AndroidAutomotiveBase)
Qt 6.4
继承 QObject

公共函数

QList<QAndroidNotificationItem *>getActiveNotifications()
QAndroidNotificationItem *getNotification(const QString &key)
boolhasNotificationAccess()
boolisConnected()
voidrequestNotificationAccess()
voidstart()
voidstop()

公共槽

voiddismissNotification(const QString &key) const
voidlaunchContentIntent(const QString &key) const
voidsnoozeNotification(const QString &key, long duration) const

信号

voidconnectedChanged(bool connected)
voidnotificationAccessChanged(bool isAccessGranted)
voidnotificationPosted(QAndroidNotificationItem *notification)
voidnotificationRemoved(const QString &key)

静态公共成员

QAndroidNotificationListener *instance()

详细描述

修改清单文件

要启用通知监听服务,需要在应用的 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>

这是在 Android 设置页面中将应用识别为通知监听器所必需的,否则无法授予其访问通知的权限。

通知监听器的已知问题及限制

检查是否已授予对通知的访问权限需要 Android API 27 或更高版本才能正常工作。

成员函数文档

[信号] void QAndroidNotificationListener::connectedChanged(bool connected)

当监听器准备就绪并已连接到Android的系统通知服务,或监听器与Android的系统通知服务断开连接时,会发出此信号。如果此信号以false的值发出connected,则应调用QAndroidNotificationListener::start(),直到QAndroidNotificationListener::isConnected()返回true。尝试调用其他方法将不会产生预期的结果。

另请参阅isConnected

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

如果存在一个当前激活且可清除的通知,则取消显示具有给定key的通知。

QList<QAndroidNotificationItem *> QAndroidNotificationListener::getActiveNotifications()

返回活动通知的列表。返回的通知所有权不转移,在notificationRemoved(const QString &key)发出匹配的密钥时,应清除返回通知的任何持有引用。

另请参阅notificationRemoved

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

返回与匹配的key匹配的通知,如果不存在则返回nullptr。所有权不转移,当notificationRemoved(const QString &key)发出匹配的key时,应清除返回通知的任何持有引用。

另请参阅notificationRemoved

bool QAndroidNotificationListener::hasNotificationAccess()

检查是否已授予监听通知的访问权限。如果已授予访问权限,则返回true,如果没有则返回false

注意:由于使用了底层Android API,当使用的Android API级别是27(Android 8.1)或更高时,此方法才能检查通知访问权。如果使用较低的API级别,则此方法始终返回true,这意味着不会QAndroidNotificationListener将自行处理请求访问。相反,您必须自行处理访问请求,例如通过调用requestNotificationListenerAccess()。

[静态] QAndroidNotificationListener *QAndroidNotificationListener::instance()

返回指向单例实例的指针。

bool QAndroidNotificationListener::isConnected()

返回监听器是否已连接到Android的通知服务并准备就绪。

注意:由于Android通知监听服务底层实现的限制,在监听器成功连接之前,唯一可用的功能是 start()。如果在返回false时调用其他函数,则不会得到期望的行为,例如 getActiveNotifications() 将始终返回一个空列表。因此,建议在尝试访问其他功能之前,检查此方法返回值是否为 true,如果返回 false,请等待 connected() 信号发出。

另请参阅 connectedChanged

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

发送与匹配 key 的通知的 contentIntent。如果通知没有有效的 contentIntent,调用此函数不会有任何效果。

另请参阅 QAndroidNotificationItem::performContentAction

[信号] void QAndroidNotificationListener::notificationAccessChanged(bool isAccessGranted)

当监听通知的访问权限 isAccessGranted 发生变化时,将发出此信号。

另请参阅 hasNotificationAccessrequestNotificationAccess

[信号] void QAndroidNotificationListener::notificationPosted(QAndroidNotificationItem *notification)

当发布了一个新的 notification 时,将发出此信号。

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

当删除具有给定 key 的通知时,将发出此信号。相应的 QAndroidNotificationItem 将被删除,并且当此信号发出时,应该清除对其的任何引用。

void QAndroidNotificationListener::requestNotificationAccess()

打开设置视图以授予对通知的访问权限。

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

将该 key 的通知设置为 duration 毫秒的休眠。这将导致休眠通知被删除,并在 duration 经过后再次发布。就像一个正常移除或发布通知时,此时将发出 notificationRemoved(const QString& key) 和 notificationPosted(QAndroidNotificationItem* notification)。

void QAndroidNotificationListener::start()

请求启动并绑定通知监听服务。如果未授权通知访问,绑定服务将不会成功。如果调用此方法且未授权访问,将打开应用通知访问设置视图

通常,只有在调用< href="qandroidnotificationlistener.html#stop" translate="no">stop() 或者尚未授权访问通知时才需要调用此方法。Android 将在授予访问权限的情况下自动启动服务,无需调用此方法。

另请参阅 stop() 和 isConnected()。

void QAndroidNotificationListener::stop()

停止监听通知,解除服务绑定。

另请参阅 start

在某些 Qt 许可证下可用。
了解更多信息。