Пробуждение/запуск MainApp из фоновой задачи после TimeTrigger в Windows Phone 8.1

Вот мой сценарий: у меня есть приложение Windows Phone 8.1 (MainApp), библиотека классов и компонент среды выполнения Windows (BackgroundTask) в одном решении.

Когда я загружаю свое приложение, я регистрирую TimeTrigger BackgroundTask, а затем ОС справляется с этим. Для задачи есть два события: метод Run (внутри самой задачи) и обратный вызов TaskCompleted, который я получаю в своей библиотеке классов после завершения задачи. Оба события выполняются, когда приложение находится на переднем плане или в фоновом режиме.
Когда приложение выключено, BackgroundTask все еще существует, потому что его обрабатывает ОС, он всегда там. Дело в том, что я хочу выполнять методы в моей библиотеке классов, когда выполняется метод Run задачи, но поскольку у меня нет экземпляра моего приложения, я не могу этого сделать.

Итак, как я могу из своего BackgroundTask, когда приложение выключено, выполнять код из моей библиотеки классов или основного приложения? Могу ли я разбудить/запустить приложение в фоновом или переднем плане с моего BackgroundTask?


person Schrödinger's Box    schedule 29.09.2014    source источник


Ответы (2)


ОС не позволяет вам открывать ваше приложение из фоновой задачи, так как это нарушило бы работу пользователя на переднем плане, поскольку вы изменили бы его без их согласия (именно поэтому тост, подобный упомянутому Робом Капланом, имел бы смысл вместо этого). Упомянутый вами обработчик TaskCompleted, на мой взгляд, предназначен для того, чтобы позволить вашему пользовательскому интерфейсу (который будет виден пользователю) реагировать на последний завершенный экземпляр фоновой задачи зарегистрированной задачи (например, для отображения обновленной обложки альбома, которая была загружен в вашу задачу bg, пока ваше приложение было на переднем плане).

Чтобы запустить код из библиотеки классов, которую вы упомянули в ответ на выполненную задачу, просто укажите ссылку на библиотеку классов (должна поддерживаться для ссылки библиотекой winRT, такой как переносимая библиотека) или переместите код в библиотеку фоновой задачи winRT и вызовите ее. код из метода IBackgroundTask.Run перед выходом.

person Jimmy Alexander    schedule 30.09.2014

Нет. Невозможно программно открыть основное приложение. Не похоже, что это имеет смысл для вашего случая, но вы можете показать уведомление, чтобы попросить пользователя открыть приложение.

В противном случае лучше всего установить флаг, что обработка необходима, а затем проверить, что в следующий раз, когда пользователь запустит основное приложение.

person Rob Caplan - MSFT    schedule 29.09.2014