我建议你提供帮助。
我正在使用Silverlight 8.1编程一个基于全球定位系统的报警应用程序(因为Microsoft.Phone.Scheduler.Alarm api在WP8.1中被阻塞)。现在,我正在尝试创建一个由BackgroundTask触发的GeofenceMonitor。
我的问题是,BackgroundTask必须位于"Windows组件“项目中,您不能将编译目标设置为Silverlight 8.1,因此不能在其中创建警报。
有解决办法吗?还是根本不可能从BackgroundTask发出警报?我会感激所有的解决方案。
发布于 2015-05-30 22:29:34
不幸的是,您不能混合WinRT和WP8.1Silverlight。
正如您所提到的,警报API不适用于WP (“通用”),Silverlight运行时也没有GeofenceMonitor。您可以使用带有WinRT后台任务的Silverlight项目,但这不会使您有任何进展。
我不知道您是否希望这些警报与某个位置永久关联,或者更确切地说是短暂的,但也许这将是一个解决方案:
将您的应用程序配置为在后台继续运行。有一个专门的"LocationTracking“执行类型,您可以使用任何应用程序,跟踪全球定位系统的位置在后台(详见本站 )。
然后,您可以使用PositionChanged事件的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)。
https://stackoverflow.com/questions/30551284
复制相似问题