Microsoft.Phone.Scheduler.Alarm 在 BackgroundTask 中

Microsoft.Phone.Scheduler.Alarm in a BackgroundTask

我推荐你的帮助。

我正在使用 Silverlight 8.1 编写基于 GPS 的警报应用程序(因为 Microsoft.Phone.Scheduler.Alarm api 在 WP 8.1 中被阻止)。 现在我正在尝试创建一个由 GeofenceMonitor 触发的 BackgroundTask。

我的问题是 BackgroundTask 必须位于 "Windows Runtime Component" 项目中,并且您无法将编译目标设置为 Silverlight 8.1,因此我无法在其中创建警报。

是否有解决方法,或者根本无法从 BackgroundTask 启动警报? 我将不胜感激每一个解决方案。

遗憾的是,您不能混合使用 WinRT 和 WP8.1 Silverlight。

正如您所提到的,Alarm API 不适用于 WP("universal")并且 Silverlight Runtime 没有 GeofenceMonitor。您可以拥有一个带有 WinRT 后台任务的 Silverlight 项目,但这对您没有任何帮助。

我不知道您是希望这些警报与某个位置永久关联还是短暂关联,但这也许是一个解决方案:

将您的应用配置为在后台保持 运行。有一个专用的 "LocationTracking" 执行类型,您可以将其用于在后台跟踪 GPS 位置的任何应用(有关详细信息,请参阅 this site)。

然后您可以使用 GeolocatorPositionChanged 事件来检查您是否在围栏内并添加(几乎)即时警报。

const string id = "whateverYourIdIs";
var existing = ScheduledActionService.Find(id);
if(existing != null)
   ScheduledActionService.Remove(id);

Alarm alarm = new Alarm(id)
{
   BeginTime = DateTime.Now.AddSeconds(1),
   Content = "You have reached your location!",
};

ScheduledActionService.Add(alarm);

如果您不想保留您的应用 运行,您可以(可能)从地理围栏后台任务 (WinRT) 中启动另一个后台任务 (SL)。