Windows 8 學習筆記(六)—Accelerormeter和GeoLocation


WinRT中的設備類庫中包含多種設備信息,如Sensor重力加速計,Location位置信息,Bluetooth藍牙,Sms信息收發,下面看看各種使用方式:

Sensor重力加速器

Accelerormeter重力加速計對象,通過該對象可以獲取重力加速X\Y\Z的值

首先定義該對象

Accelerormeter _accelerometer = Accelerometer.GetDefault();

接下來通過ReadingChanged事件去跟蹤X\Y\Z值,Shaken晃動事件去作一些邏輯處理

注冊ReadingChanged事件

_accelerometer.ReadingChanged += _accelerometer_ReadingChanged;
void _accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
        {
            Dispatcher.InvokeAsync(CoreDispatcherPriority.Normal, (s, a) =>
            {
                AccelerometerReading reading = (a.Context as AccelerometerReadingChangedEventArgs).Reading;
                tbX.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
                tbY.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
                tbZ.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
            }, this, e);
        }

注冊Shaken事件

_accelerometer.Shaken += _accelerometer_Shaken;
void _accelerometer_Shaken(Accelerometer sender, AccelerometerShakenEventArgs args)
        {
            Dispatcher.InvokeAsync(CoreDispatcherPriority.Normal, (s, a) =>
            {
                _shakeCount++;
                tbShakeCount.Text = _shakeCount.ToString();
            }, this, e);
        }

 

其中需注意兩個屬性:

MinimumReportInterval 用於獲取重力感應器報告數據的最小間隔時間

ReportInterval 設置或獲取報告間隔值,該值的設置可以反應加速計的敏感性

aa

 

GeoLocation位置信息

位置信息由Windows位置提供商通過WI-FI和IP 地址數據決定當前的地理信息,或者也可以通過GPS獲取。通過GeoLocation可以得到准確的位置數據。

首先定義一個GeoLocation對象

Geolocator m_geo= new Geolocator();

接下來通過PositionChanged和 StatusChanged事件獲取位置數據和當前位置設備器的狀態

m_geo.PositionChanged += m_geo_PositionChanged;
Dispatcher.InvokeAsync(CoreDispatcherPriority.Normal, (s, a) =>
            {
//先得到當前位置對象
                Geoposition pos = (a.Context as IPositionChangedEventArgs).Position;
                textblock1.Text = "Latitude: " + pos.Coordinate.Latitude.ToString();
                textblock2.Text = "Longitude: " + pos.Coordinate.Longitude.ToString();
                textblock3.Text = "Accuracy: " + pos.Coordinate.Accuracy.ToString();
            }, this, e);

 

監視當前位置定位器的狀態

m_geo.StatusChanged += m_geo_StatusChanged;
void m_geo_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
        {
            Dispatcher.InvokeAsync(CoreDispatcherPriority.Normal, (s, a) =>
            {
                PositionStatus status = (a.Context as IStatusChangedEventArgs).Status;
                switch (status)
                {
                    case PositionStatus.Ready:
                        textblockStatus1.Text = "Ready";
                        break;
                    case PositionStatus.Initializing:
                        textblockStatus1.Text = "Initializing";
                        break;
                    case PositionStatus.NoData:
                        textblockStatus1.Text = "No data";
                        break;
                    case PositionStatus.Disabled:
                        textblockStatus1.Text = "Disabled";
                        break;
                    case PositionStatus.NotInitialized:
                        textblockStatus1.Text = "Not initialized";
                        break;
                    case PositionStatus.NotAvailable:
                        textblockStatus1.Text = "Not available";
                        break;
                    default:
                        textblockStatus1.Text = "Unexpected status";
                        break;
                }
            }, this, e);
        }

 

同樣也有兩個屬性,這兩個屬性都是枚舉類型:

PositionAccuracy:位置精准度,有0(默認)和1(高級別)兩個值

PositionStatus:表明Geolocator提供位置數據的能力,上面例子也列出相應的枚舉類型

 

今天先整理這兩種設備的用法及信息的獲取,后續還要繼續學習其它設備用法,待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM