Windows Phone Silverlight 8.1后台代理

时间:2014-06-02 00:29:11

标签: c# silverlight windows-phone-8.1

我正在用c#开发一个Silverlight 8.1应用程序。我想在我的后台周期性任务中使用一些旧的手机API,所以我不能使用新的IBackgroundTask RT接口。

我创建了一个带有OnInvoke覆盖的旧样式后台代理,然后在WMAppManifest.xml中注册:<ExtendedTask Name="BackgroundTask"> <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="BackgroundAgent" Source="BackgroundAgent" Type="BackgroundAgent.ScheduledAgent" /> </ExtendedTask>

其中BackgroundAgent是我的后台代理库,而ScheduledAgent是我的类。

我已在Package.appxmanifest中为该应用启用了Toast通知。我的通知系统是WNS(在WMAppManifest中)。

我正试图以旧学校的方式启动任务:

BackgroundExecutionManager.RequestAccessAsync();
  var periodicTask = ScheduledActionService.Find("BackgroundTask");

  if (periodicTask != null)
  {
    ScheduledActionService.Remove("BackgroundTask");
  }

  periodicTask = new PeriodicTask("BackgroundTask");
  (periodicTask as ScheduledTask).Description = "Hello, world.";
  ScheduledActionService.Add(periodicTask);

  ScheduledActionService.LaunchForTest("BackgroundTask", TimeSpan.FromSeconds(60));

在我的MainPage.xaml.cs的OnNavigatedTo方法中。

我可以看到此代码运行。

但是,我从来没有看到任何代码在我的后台代理中运行 - 它应该向我发送一个toast(我尝试使用ShellToast和新的ToastNotificationManager进行基于xml的toast)并进行http调用 - 两者都是不要发生。

我观看了Build™视频,他们提到应该在Silverlight 8.1应用程序中完全支持后台代理。

我还可以确认我的应用程序在电池节电器设置中显示为“允许”,这表示后台代理已在操作系统中注册。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

我认为您需要具有&#34;系统事件&#34;类型的后台任务。进入点&#34; AgHost.BackgroundTask&#34;在Package.appxmanifest中。这就是在WP8.1 SL应用程序中托管SL后台代理的原因。如果您没有在清单文件中执行此任务,请自行添加并查看它以解决您的问题。

<强>更新

根据我的经验,&#34;系统活动&#34;类型应该工作,但zaitsman说他需要使用&#34; Timer&#34;,所以如果第一个不适合你 - 尝试另一个。

更新2

换句话说,你需要这个:

  <Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="AgHost.BackgroundTask">
      <BackgroundTasks>
        <Task Type="systemEvent" />
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>
  </Extensions>

在WP 8.1 SL应用程序的 Package.appxmanifest 文件的Application标记内(不要与WMAppManifest.xml混淆)。