我正在用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应用程序中完全支持后台代理。
我还可以确认我的应用程序在电池节电器设置中显示为“允许”,这表示后台代理已在操作系统中注册。
我做错了什么?
答案 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混淆)。