在Windows Phone 8.1中的TimeTrigger之后从后台任务唤醒/启动MainApp

时间:2014-09-29 15:17:34

标签: c# windows-phone-8.1 win-universal-app background-task

这是我的方案:我在同一解决方案中有一个Windows Phone 8.1应用程序(MainApp),一个类库和一个Windows运行时组件(BackgroundTask)。

当我加载我的应用程序时,我注册了TimeTrigger BackgroundTask,然后操作系统处理此问题。在任务完成后,任务有两个事件,Run方法(在任务本身内)和我在类库中收到的TaskCompleted回调。当应用程序位于前景或背景中时,将执行这两个事件 当应用程序关闭时,BackgroundTask仍然存在,因为它是处理它的操作系统,它始终存在。问题是我想在执行任务的Run方法时在我的类库中执行方法,但由于我没有我的应用程序的实例,所以我不能这样做。
< BR />

那么,在应用程序关闭时,我如何从我的BackgroundTask执行我的类库或MainApp中的代码?我可以从我的BackgroundTask启动/启动应用程序到背景或前景吗?

2 个答案:

答案 0 :(得分:2)

没有。无法以编程方式打开主应用程序。它对您的案例听起来没有意义,但您可以显示通知,要求用户打开该应用。

否则最好的方法是设置一个需要处理的标志,然后检查下次用户运行主应用程序。

答案 1 :(得分:2)

操作系统不允许您从后台任务中打开您的应用程序,因为这会违反用户的前景体验,因为您将在未经他们同意的情况下更改它(这就是为什么像Rob Caplan所提到的Toast会有意义的话) 。你提到的TaskCompleted处理程序在我看来是允许你允许你的UI(用户可以看到)对已注册任务的最后完成的后台任务实例做出反应(例如:显示更新的)在您的应用处于前台时,在您的bg任务中下载的专辑封面)。

要运行您提交的类库中的代码以响应已完成的任务,只需引用类库(必须支持winRT库(如可移植库)的引用)或将代码移动到后台任务winRT库并在退出之前从IBackgroundTask.Run方法调用该代码。