检测用户是从 winrt windows phone 8.1 应用程序中的位置设置返回的
Posted
技术标签:
【中文标题】检测用户是从 winrt windows phone 8.1 应用程序中的位置设置返回的【英文标题】:Detect that user is returned from location settings in winrt windows phone 8.1 application 【发布时间】:2015-08-12 08:01:49 【问题描述】:我正在我的应用程序中打开位置设置,如下所示:
await Launcher.LaunchUriAsync(new Uri("ms-settings-location:"));
但是当位置设置打开并且用户打开位置并返回时,不会触发任何事件。我如何知道用户已从设置中返回,以便我可以检查用户是否有打开的位置设置... onnavigatedto 和 onnavigatedfrom 事件在分别返回和离开我的应用程序页面时不会被触发。
【问题讨论】:
【参考方案1】:假设您实现了以下代码:
Window.Current.VisibilityChanged += Current_VisibilityChanged;
Window.Current.SizeChanged += Current_SizeChanged;
Window.Current.Activated += Current_Activated;
Window.Current.Closed += Current_Closed;
App.Current.Resuming += Current_Resuming;
App.Current.Suspending += Current_Suspending;
操作面板
如果操作面板打开,则不会引发上述任何事件,是的,什么都不会!
设置
如果用户点击ALL SETTINGS
,它将导航到设置页面并引发一些事件:
返回应用程序
Current_Resuming Current_VisibilityChanged Current_Activated地理定位器(解决方案)
在Geolocator
类中有一个StatusChanged 事件,您应该订阅它。
如果用户打开了Location
,那么您应该等待StatusChangedEventArgs.Status
变为Ready
,然后再继续尝试获取该位置,如果变为Disabled
,则停止。
订阅此事件会更好,因为它可以让您确切地知道发生了什么。
【讨论】:
GeoLocator 解决方案对我来说似乎是最好的,我现在已经应用了一个奇怪的解决方案,我会尝试这个,如果它解决了我的问题,然后将它标记为答案【参考方案2】:肯定会触发一些事件,你可以使用:
Suspending/Resuming 事件。用户导航到设置后,您的应用将很快暂停。请注意,因此在调试 PLM 时禁用并且 Suspending/Resuming 事件 won't be raised - 您必须使用 Lifecycle events 选项卡进行测试, 订阅Windows.VisibilityChanged 事件 - 您必须小心处理此事件,因为在更多情况下会触发 Suspending 事件, 订阅Windows.Activated 事件 - 就像上面一样,它被触发的次数甚至比VisivilityChanged还要多。可能最好的选择是 Suspending 事件。有了这个,您还可以处理应用程序被操作系统终止的情况。
【讨论】:
以上是关于检测用户是从 winrt windows phone 8.1 应用程序中的位置设置返回的的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 WinRT/Windows 通用应用程序的后台任务中检索手机电池状态?
使用 WinRT Appointments API 在没有用户确认的情况下编写约会