繁体   English   中英

Windows Phone Silverlight 8.1后台代理

[英]Windows Phone Silverlight 8.1 background agent

我正在用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方法内。

我可以看到这段代码正在运行。

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

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

我还可以确认我的应用在Battery Saver设置中显示为“允许”,这表明后台代理已在os中注册。

我究竟做错了什么?

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

更新

根据我的经验,“系统事件”类型应该可以工作,但是zaitsman说他需要使用“计时器”,因此,如果第一个对您不起作用,请尝试另一个。

更新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混淆)中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM