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) |
bool | hasNotificationAccess() |
bool | isConnected() |
void | requestNotificationAccess() |
void | start() |
void | stop() |
公共槽
void | dismissNotification(const QString &key) const |
void | launchContentIntent(const QString &key) const |
void | snoozeNotification(const QString &key, long duration) const |
信号
void | connectedChanged(bool connected) |
void | notificationAccessChanged(bool isAccessGranted) |
void | notificationPosted(QAndroidNotificationItem *notification) |
void | notificationRemoved(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 发生变化时,将发出此信号。
另请参阅 hasNotificationAccess 和 requestNotificationAccess。
[信号]
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 许可证下可用。
了解更多信息。