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 設置或獲取報告間隔值,該值的設置可以反應加速計的敏感性
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提供位置數據的能力,上面例子也列出相應的枚舉類型
今天先整理這兩種設備的用法及信息的獲取,后續還要繼續學習其它設備用法,待續。。。

