Windows 8 地理位置定位 2.定位器狀態監測

來源:互聯網
上載者:User

在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;        }    }}

運行如下:

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.