检测用户是从 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_VisibilityChanged Current_Closed Current_Suspending

返回应用程序

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 中创建 IME?

使用 WinRT Appointments API 在没有用户确认的情况下编写约会

使用 Windows 10、WinRT 拍照

是否可以在 Windows 7 上构建 WinRT 应用程序?

Windows Runtime(WinRT) 揭秘