zoukankan      html  css  js  c++  java
  • Windows 8 地理位置定位 2.定位器状态监测

    在Windows8中,定位器不一定随时可用,所以我们在使用定位器时最好先检查一下定位器的状态。
    状态可以从Geolocator中的属性LocationStatus获得。

    定位器状态是枚举类型PositionStatus,共有6种状态:Ready、Initializing、NoData、Disabled、NotInitialized、NotAvailable。

    另外,有时还需要不断检测定位器的状态,当定位器不可用时给用户友好的提示,或做出其它的动作。Geolocator中有一个事件StatusChanged专门用来监测定位器状态的改变。

    下面来看代码,总共只有一张页面。

    前台XAML代码如下:

    前台XAML
    <Page
        x:Class="Win8Location.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Win8Location"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <StackPanel Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <Button x:Name="btnCheckStatusChanged" Content="监测定位器状态" Click="btnCheckStatusChanged_Click"/>
            <ScrollViewer>
                <TextBlock x:Name="txtMsg" TextWrapping="Wrap" FontSize="20"/>
            </ScrollViewer>
        </StackPanel>
    </Page>

    后台cs代码如下:

    后台cs
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using Windows.Devices.Geolocation;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Core;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    namespace Win8Location
    {
        public sealed partial class MainPage : Page
        {
            Geolocator geo = null;
            public MainPage()
            {
                this.InitializeComponent();
            }
    
            private void btnCheckStatusChanged_Click(object sender, RoutedEventArgs e)
            {
                btnCheckStatusChanged.IsEnabled = false;
                if (geo == null)
                {
                    geo = new Geolocator();
                }
                txtMsg.Text = DateTime.Now.ToString() + ">定位器启动,状态为:" + geo.LocationStatus + "\n状态描述:" + GetDescription(geo.LocationStatus);
                geo.StatusChanged += geo_StatusChanged;
            }
    
            async void geo_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
            {
                PositionStatus statu = args.Status;
                string msg = "\n\n" + DateTime.Now.ToString() + ">定位器状态改变为:" + statu.ToString();
                msg += "\n状态描述:" + GetDescription(statu);
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    txtMsg.Text += msg;
                });
            }
    
            string GetDescription(PositionStatus statu)
            {
                string description = null;
                switch (statu)
                {
                    case PositionStatus.Ready:
                        description = "提供位置数据。";
                        break;
    
                    case PositionStatus.Initializing:
                        description = "位置提供程序正在初始化。如果 GPS 是位置数据源,并且视图中的 GPS 接收器没有所需的附属数目来获取准确的位置,则此为该状态。";
                        break;
    
                    case PositionStatus.NoData:
                        description = "没有来自任何位置提供程序的可用位置数据。在可从位置传感器获取数据之前,LocationStatus 将在应用程序调用 GetGeopositionAsync或注册 PositionChanged 事件的事件处理程序时具有此值。数据可用后,LocationStatus 转换为 Ready 状态。";
                        break;
    
                    case PositionStatus.Disabled:
                        description = "位置提供程序已禁用。此状态指示尚未被授予该用户访问位置的应用程序权限。";
                        break;
    
                    case PositionStatus.NotInitialized:
                        description = "检索位置的操作尚未初始化。如果应用程序尚未调用 GetGeopositionAsync,或为 PositionChanged 事件注册事件处理程序,则LocationStatus 可能具有此值。";
                        break;
    
                    case PositionStatus.NotAvailable:
                        description = "Windows 传感器和位置平台在此版本的 Windows 中不可用。";
                        break;
    
                    default:
                        description = "您的定位器太先进了,目前的技术无法得知其状态:)";
                        break;
                }
                return description;
            }
        }
    }

    运行截图如下:

  • 相关阅读:
    Pandas 中对列 groupby 后进行 sum() 与 count() 区别及 agg() 的使用方法
    数据预处理 | python 第三方库 imblearn 处理样本分布不均衡问题
    数据预处理 | 使用 pandas.to_datetime 处理时间类型的数据
    CSS自定义文件上传按钮样式,兼容主流浏览器
    php实现计划任务
    windows环境下为php打开ssh2扩展
    vmware上linux连网(centos6.3、ubuntu14测试通过)
    如何实现打开网页自动弹出QQ对话框
    php输出最近N个月的起至时间戳
    内部div自动扩张剩余宽度(包含固定宽度div和自适应宽度div)
  • 原文地址:https://www.cnblogs.com/chengyujia/p/2850914.html
Copyright © 2011-2022 走看看