Документация
ОС Аврора 5.0.1

Call API

Call API — это программный интерфейс приложения (API), разработанный специально для интеграции сторонних коммуникационных приложений в ОС Аврора. Он предоставляет разработчикам возможность интегрировать функции сигнализации и управления звонками в ОС Аврора наравне с звонками сотовой сети для переиспользования графического интерфейса ОС Аврора и корректного управления ресурсами при конкурирующих звонках.

При использовании Call API управление состоянием устройства в режиме звонка (режим экрана, реакция на датчик приближения, управление маршрутом звука) происходит автоматически, аудио- и графические уведомления возможны при заблокированном экране устройства и обрабатываются теми же сервисами, что и при звонках через сотовую сеть.

Объект Call в рамках Call API предоставляет несколько интерфейсов для взаимодействия.

Интерфейс D-Bus Назначение
Call.Service1 Регистрация провайдера звонков в ОС
Call.Call1 Управление конкретным вызовом
Call.DTMF1 Вызывается ОС после событий клавиатуры

Функциональность Call API

Регистрация в системе

Для работы с Call API необходимо иметь разрешение Call в манифесте (desktop-файле) приложения.

Для начала работы с Call API необходимо создать на сессионной шине объект CallManager типа org.freedesktop.DBus.ObjectManager и сообщить о его наличии с помощью вызова ru.auroraos.Call.Service1.RegisterCallManager. При успешной регистрации ответ будет пустым без ошибки. Приложение может зарегистрировать несколько CallManager, например, для разных активных аккаунтов.

Уведомление системы о входящем или исходящем звонке

Для уведомления ОС о входящем звонке приложение регистрирует объект типа ru.auroraos.Call.Call1, затем через объект org.freedesktop.DBus.ObjectManager, предварительно зарегистрированный в сервисе ru.auroraos.Call.Service1, ОС управляет звонком путём вызова методов ru.auroraos.Call.Call1. При изменении статуса звонка приложение сообщает об этом операционной системе сигналом ru.auroraos.Call.Call1.StatusChanged.

Когда приложение решает уведомить пользователя о входящем вызове, оно создаёт на сессионной шине D-Bus объект ru.auroraos.Call.Call1 и сигнализирует об этом через CallManager испустив сигнал org.freedesktop.DBus.ObjectManager.InterfacesAdded. В качестве параметров должны быть указаны путь на D-Bus и свойства (Property) объекта типа ru.auroraos.Call.Call1. Операционная система отображает интерфейс приложения Телефон согласно свойством объекта звонка. В системе может быть одновременно несколько звонков, но только один из них может быть активным. При его переходе в состоянии Active другие активные переводятся на удержание или отклоняются.

Управление звонком

Управление звонком осуществляется вызовом сигналов и методов объекта ru.auroraos.Call.Call1. Нажатия кнопок графического интерфейса Телефона приводит к вызовам методов; изменения свойства Status меняют состояние графического интерфейса.

Завершение звонка

Для завершения звонка необходимо изменить статус соответствующего объекта Call.Call1 на Disconnected, затем сообщить об удалении объекта звонка сигналом org.freedesktop.DBus.ObjectManager.InterfacesRemoved через CallManager.

Уведомления при проигрывании мультимедиа

Функциональность Call API предоставляет возможность автоматической паузы проигрывания мультимедиа при получении уведомлений о входящих или исходящих звонках. Этот функционал также позволяет сохранить слышимость уведомлений, которые приходят во время проигрывания мультимедиа.

Экран входящего звонка

Функциональность Call API реализует системный экран входящего звонка и звуковое/тактильное оповещение с учётом системных настроек. При входящем звонке, экран показывается независимо от того, заблокировано или разблокировано устройство.

Экран входящего звонка имеет приоритет, как у обычного экрана звонка. На этом экране отображается следующая информация:

  • Отклонить входящий звонок.
  • Принять входящий звонок.
  • Показать диалоговое окно подтверждения для завершения активного звонка и переключения на входящий звонок.
  • В некоторых случаях информация на экране входящего звонка может быть недоступной.

Также Call API предоставляет звуковое или тактильное уведомление с учётом системных настроек (режимы "Не беспокоить" и "Бесшумный", настройки звука/вибрации). При новых входящих звонках во время непринятого входящего звонка сохраняется возможность ответить на входящий звонок, для которого активен системный экран входящего звонка.

Маршрутизация звука

Система маршрутизации звука — это механизм, который позволяет управлять потоком звука в операционной системе. Он определяет, какой звуковой источник будет проигрываться через какое аудиоустройство.

Для корректной маршрутизации звука необходимо отключить автоматическое управление ресурсами и управлять ими вручную через библиотеку libresource-qt5. Для этого необходимо установить переменную окружения как можно раньше, до запуска любого аудиопотока, лучше в main():

setenv("NEMO_RESOURCE_DISABLE", "1", true);

В режиме звонка перед созданием звуковых потоков должен быть захвачен ресурс call с помощью библиотеки libresource-qt5:

auto resourceSet = new ResourceSet("call", q, false, false);

ResourcePolicy::AudioResource *audioResource = new ResourcePolicy::AudioResource;
audioResource->setProcessID(QCoreApplication::applicationPid());        
audioResource->setStreamTag("media.name", "*");

resourceSet->addResourceObject(audioResource);
resourceSet->addResourceObject(new ResourcePolicy::AudioRecorderResource);

Аудиопотоки можно создавать после получения сигнала ResourceSet::resourcesGranted. После завершения звонка resourceSet должен быть освобождён.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.