我推荐你帮忙。
我使用Silverlight 8.1来编程一个基于GPS的警报应用程序(因为Microsoft.Phone.Scheduler.Alarm api在WP 8.1中被阻止)。现在我正在尝试创建一个由GeofenceMonitor触发的后台任务。
我的问题是,后台任务必须位于"Windows运行时组件"项目,你不能将编译目标设置为Silverlight 8.1,所以我不能在那里创建一个警报。
是否有一个解决方案,还是根本不可能从后台任务启动警报?
遗憾的是,您不能将WinRT和WP8.1 Silverlight混合使用。
正如你提到的报警API不与WP(这么多的"通用")和Silverlight运行时没有GeofenceMonitor。你可以有一个带有WinRT后台任务的Silverlight项目,但这不会让你得到任何东西。
我不知道你是想让这些警报与一个位置永久地联系在一起,还是想让它们短暂地联系在一起,但也许这将是一个解决方案:
配置你的应用程序在后台运行。有一个专用的"LocationTracking"执行类型,你可以使用任何应用程序跟踪GPS位置在后台(见这个网站的详细信息)。
然后,您可以使用Geolocator
的PositionChanged
事件来检查您是否在您的围栏内,并添加(几乎)即时警报。
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)。