0

我推荐你的帮助。

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

我的问题是 BackgroundTask 必须位于“Windows 运行时组件”项目中,并且您无法将编译目标设置为 Silverlight 8.1,因此我无法在其中创建警报。

是否有解决方法或者只是不可能从 BackgroundTask 启动警报?我将不胜感激每一个解决方案。

4

1 回答 1

1

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

正如您所提到的,Alarm API 不适用于 WP(对于“通用”而言如此之多),并且 Silverlight 运行时没有 GeofenceMonitor。您可以拥有一个带有 WinRT 后台任务的 Silverlight 项目,但这无济于事。

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

配置您的应用程序以继续在后台运行。有一个专用的“LocationTracking”执行类型,您可以将其用于在后台跟踪 GPS 位置的任何应用程序(有关详细信息,请参阅此站点)。

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

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)。

于 2015-05-30T22:29:34.007 回答