Открытие приложения через уведомление
Уведомления в ОС Аврора публикуются с помощью QML-плагина Notifications.
Уведомление может содержать заголовок, описание, изображение и одно или несколько действий. Действия работают при помощи технологии D-Bus. Действия срабатывают при нажатии на само уведомление или кнопку на нём. Например, по нажатию на уведомление приложение может быть открыто, если оно было свёрнуто, или запущено заново, если оно было полностью остановлено.
Для реализации подобного открытия приложения в QML-коде нужно выполнить следующие действия:
-
Создать D-Bus-сервис, который будет обрабатывать нажатие на уведомление. Для этого можно создать объект
DBusAdaptor
, указать в нём шину и новые сервис, путь, интерфейс, определить метод, который будет выполняться в ответ на действие, и задать описание интерфейса в формате xml. Необходимо, чтобы название D-Bus-сервиса совпадало с названием приложения, иначе вызов D-Bus-сервиса из уведомления не будет работать. Пример:DBusAdaptor { bus : DBus.SessionBus // Собственные сервисы приложений следует помещать на сессионную шину service: "ru.template.NotificationDemo" // Сервис, путь и интерфейс могут иметь название, совпадающее с названием приложения path: "/ru/template/NotificationDemo" iface: "ru.template.NotificationDemo" xml: ' <interface name="ru.template.NotificationDemo">\n' + // в интерфейсе имеется единственный метод startApp ' <method name="startApp" />\n' + ' </interface>\n' function startApp() { // Определение метода, который будет вызываться по нажатию на уведомление console.log("Connected") } }
-
Зарегистрировать D-Bus-сервис в desktop-файле и определить там же команду для запуска приложения по D-Bus. Для этого в секцию
X-Application
следует добавить строку:ExecDBus=/usr/bin/ru.template.NotificationDemo
Команда для запуска приложения по D-Bus может полностью совпадать с основной командой запуска приложения, определённой в
Exec
. -
Создать объект уведомления и определить в нём свойство
remoteActions
. В свойстве должен быть один объект, определяющий действие. Для действия следует указать D-Bus-сервис, путь, интерфейс и метод, который будет запускаться по нажатию на уведомление:Notification { id: notification icon: "image://theme/icon-lock-information" summary: qsTr("Demo") body: qsTr("Click me to launch the demo app") previewSummary: qsTr("Demo") previewBody: qsTr("My notification") remoteActions: [ { "name": "default", "displayName": "Start", "service": "ru.template.NotificationDemo", "path": "/ru/template/NotificationDemo", "iface": "ru.template.NotificationDemo", "method": "startApp", "icon": "image://theme/icon-s-invitation" } ] }
-
Запустить уведомление нажатием на кнопку:
Button { text: "Send notification" onClicked: notification.publish() }
Теперь после запуска приложения можно нажимать кнопку и тем самым публиковать уведомление. Приложение можно сворачивать или полностью закрывать, а затем запускать его заново по нажатию на уведомление.