Я работаю над приложением Xamarin.Forms с использованием библиотеки Prism. В приложении есть телефонный компонент с интеграцией с CallKit и библиотекой SIP. Когда устройство заблокировано, может быть получен звонок, в результате в пользовательском интерфейсе телефона отображается iOS. Пользователь может ответить на звонок и положить трубку. В приложении есть страница Xamarin.Forms для обработки вызовов. Есть события от службы iOS, которая имеет дело с вызовами для взаимодействия с «общим проектом». Проблема, с которой я столкнулся, заключается в том, что когда пользователь разблокирует устройство и возвращается в приложение, пользовательский интерфейс не отвечает.
Сценарий:
- Пользователь запускает приложение и входит в систему.
- Пользователь блокирует устройство
- Входящий вызов принят
- Пользователь отвечает на вызов
- За кулисами (т. е. собственный пользовательский интерфейс телефона) общается служба вызовов с «общим проектом» для отображения экрана вызова в приложении. Поскольку телефон заблокирован, пользователь не увидит этого сейчас.
- Пользователь вешает трубку.
- Когда пользователь кладет трубку, служба звонков связывается с «общим проектом», в котором был произведен звонок. прекращено и вернется к предыдущему экрану.
- Затем пользователь разблокирует экран
- Приложение находится на том же экране, что и при заблокированном пользователем устройстве, но пользовательский интерфейс не отвечает.
Для перехода на страницу вызова я делаю:
await NavigationService.NavigateAsync(targetPage, null, useModalNavigation: null, animated: animated);
и для возврата на предыдущую страницу:
await NavigationService.GoBackAsync(animated: false, parameters: parameters);
NavigationService имеет тип INavigationService от Prism.
Существенный вопрос: что заставит навигацию работать, но в результате пользовательский интерфейс не будет реагировать? Раньше я обнаруживал, что мне нужно выполнять навигацию по основному потоку. Что мне еще нужно искать?