自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Windows Phone 7數(shù)字羅盤使用指南

移動(dòng)開發(fā)
為了實(shí)現(xiàn)指向,直接使用GPS不就可以了嗎?但現(xiàn)實(shí)情況是,如果我們處于建筑物內(nèi)、或者一些無法接收衛(wèi)星信號(hào)的地方,那么GPS就無法獲取地理位置和方向信息了。在這種情況下,數(shù)字羅盤就可以發(fā)揮作用了。

1.什么是數(shù)字羅盤,和指南針有什么關(guān)系?

指南針是我們外出旅游時(shí),用來指示方向的一種工具。常見的機(jī)械式指南針,它是一種根據(jù)地球磁場(chǎng)的有極性制作的地磁指南針,但這種指南針指示的南北方向與真正的南北方向不同,存在一個(gè)磁偏角。電子器件的飛速發(fā)展,為我們帶來了電子指南針,也就是所謂的數(shù)字羅盤,它采用了磁場(chǎng)傳感器的磁阻技術(shù),可很好地修正磁偏角的問題。有人會(huì)問,為了實(shí)現(xiàn)指向,直接使用GPS不就可以了嗎?但現(xiàn)實(shí)情況是,如果我們處于建筑物內(nèi)、或者一些無法接收衛(wèi)星信號(hào)的地方,那么GPS就無法獲取地理位置和方向信息了。在這種情況下,數(shù)字羅盤就可以發(fā)揮作用了。

2.數(shù)字羅盤的種類

根據(jù)實(shí)現(xiàn)的原理,數(shù)字羅盤可以分為兩種:magnetic compass和gyro compass。前者指示的是地磁意義上的南北極,而后者指示的是地理意義上的南北極。注意,地磁南北極與地理南北極并不相同。地磁北極是地球表面地球磁場(chǎng)方向垂直向下的點(diǎn),地磁北極點(diǎn)隨時(shí)間不停的變化。另外,由于地球磁場(chǎng)并不是完全對(duì)稱的,地磁北極與地磁南極并不是處在同一個(gè)軸上。地理北極(通常就簡(jiǎn)稱為北極)是地球的自轉(zhuǎn)軸與地球表面的兩個(gè)交點(diǎn)之一(另一個(gè)點(diǎn)是南極,就在相對(duì)的另一面),地理上的北極是緯度為北緯90°的點(diǎn),在方向上是真北,在這一點(diǎn)所指向的任何方向都是南方。

3.Windows Phone 7上的數(shù)字羅盤

為了方便我們的日常生活,傳感器可以說是手機(jī)中必備的功能器件。常用的傳感器包括加速度傳感器、數(shù)字羅盤、GPS等等。當(dāng)然,手機(jī)廠商對(duì)其的支持程度也會(huì)隨著手機(jī)型號(hào)及其面向的用戶而改變。對(duì)于Windows Phone 7而言,微軟給各個(gè)手機(jī)生產(chǎn)廠商指定了一個(gè)硬件規(guī)格,包括CPU、屏幕分辨率、內(nèi)存容量和傳感器等等。具體來說,Windows Phone OS 7.0(Windows Phone RTM)支持加速度傳感器,但卻并不支持?jǐn)?shù)字羅盤(Compass)(確切的說,應(yīng)該是沒有向用戶開放Compass的API)。但是,這一情況從Windows Phone OS 7.1(Mango)發(fā)布以后就得到了改觀,Compass API是其引入的新特性之一。下圖就顯示了Windows Phone RTM和Mango這兩個(gè)版本對(duì)各種傳感器的支持情況。

WP7兩個(gè)版本間傳感器支持的差異:

Sensor Windows Phone RTM Windows Phone Mango
Accelerometer 支持 支持
Microphone 支持 支持
A-GPS 支持 支持
Camera 支持 支持
Compass 不支持 可選
Gyro 不支持 可選
Motion 不支持 可選
FM Radio 支持 支持

需要注意的是,對(duì)于Windows Phone 7設(shè)備來說,Compass并不是必須的。換句話說,微軟并沒有對(duì)其進(jìn)行強(qiáng)制規(guī)定,硬件廠商可以根據(jù)自己的意愿來選擇是否對(duì)其生產(chǎn)的Windows Phone 7設(shè)備加入數(shù)字羅盤的支持。例如,對(duì)于我的三星Focus i917而言,它支持加速度傳感器和Compass,但是卻并不支持Gyro。

4.如何判斷你的Windows Phone 7設(shè)備是否支持?jǐn)?shù)字羅盤

如何判斷Windows Phone 7設(shè)備是否支持某種傳感器,我們可以通過Microsoft.Devices.Sensors命名空間下,各個(gè)傳感器的IsSupported屬性獲得。例如,判斷設(shè)備是否支持?jǐn)?shù)字羅盤,我們可以使用下面的語句:

  1. Compass compass;  
  2. if (!Compass.IsSupported)  
  3. {  
  4.   statusTextBlock.Text = "device does not support compass";  
  5.   ApplicationBar.IsVisible = false;  

5.Compass提供的數(shù)據(jù)

Windows Phone 7的Compass,可以提供的數(shù)據(jù)及其含義如下:

(1)HeadingAccuracy -- 數(shù)字羅盤方向指示的精度,該數(shù)值一般用來指示是否需要校準(zhǔn)。

(2)MagneticHeading -- 與地磁北極的偏角,一般用角度來表示。

(3)TrueHeading -- 與地理北極的偏角,一般用角度來表示。

(4)MagnetometerReading -- 從磁力計(jì)得到的原始數(shù)據(jù),以微特斯拉為單位,用XNA中的 Vector3 作為數(shù)據(jù)類型。

注:Windows Phone 7的Compass提供了TrueHeading,從數(shù)字羅盤的分類上看,它還實(shí)現(xiàn)了gyro的功能。但是,從MSDN的文檔《Sensors Overview for Windows Phone》來看,其compass提供的應(yīng)該是與地磁北極的偏角:

“The Compass, or magnetometer, sensor can be used to determine the angle by which the device is rotated relative to the Earth’s magnetic north pole. An application can also use raw magnetometer readings to detect magnetic forces around the device.”

所以,對(duì)于這一點(diǎn),我還是存在疑惑。

6.如何為Windows Phone 7應(yīng)用程序加入Compass?

關(guān)于這一點(diǎn),我們可以參考MSDN上的這篇文章:《How to: Get Data from the Compass Sensor for Windows Phone》。需要注意的有以下幾點(diǎn):

(1)我們需要添加對(duì)Microsoft.Devices.Sensors以及Microsoft.Xna.Framework的引用。

(2)我們需要在xaml對(duì)應(yīng)的cs文件中,聲明對(duì)命名空間的引入:

  1. using Microsoft.Devices.Sensors;  
  2. using Microsoft.Xna.Framework;  
  3. using System.Windows.Threading; 

 (3)手機(jī)豎屏模式與橫屏模式對(duì)Compass的影響。應(yīng)用程序從Compass類中獲得的角度信息會(huì)根據(jù)手機(jī)的姿態(tài)有所調(diào)整,其中主要是橫屏和豎屏模式的區(qū)別。判斷手機(jī)處于哪種狀態(tài),可以通過加速度傳感器中Z軸的值來實(shí)現(xiàn)。

  1. void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)  
  2. {  
  3.    Vector3 v = e.SensorReading.Acceleration;  
  4.      
  5.    bool isCompassUsingNegativeZAxis = false;  
  6.     
  7.    if (Math.Abs(v.Z) < Math.Cos(Math.PI / 4) &&  
  8.                  (v.Y < Math.Sin(7 * Math.PI / 4)))  
  9.     {  
  10.      isCompassUsingNegativeZAxis = true;  
  11.     }  
  12.      
  13.    Dispatcher.BeginInvoke(() => { orientationTextBlock.Text = (isCompassUsingNegativeZAxis) ? "portrait mode" : "flat mode"; });  

7.Compass的校準(zhǔn)

由于受到外部電磁場(chǎng)的干擾,會(huì)使得手機(jī)的Compass數(shù)據(jù)精度降低,在這種情況下,我們必須提示用戶遠(yuǎn)離磁場(chǎng)干擾,并且對(duì)Compass進(jìn)行校準(zhǔn)。在Windows Phone 7上,與CurrentValueChanged一樣,OS為Compass提供了校準(zhǔn)事件處理compass_Calibrate。在OS檢測(cè)到heading accuracy的絕對(duì)值大于20度時(shí),就會(huì)觸發(fā)該事件。在對(duì)Compass進(jìn)行校準(zhǔn)時(shí),一般顯示一個(gè)圖片,提示用戶對(duì)手機(jī)進(jìn)行繞“8”字移動(dòng)。

  1. void compass_Calibrate(object sender, CalibrationEventArgs e)  
  2.  {  
  3.     Dispatcher.BeginInvoke(() => { calibrationStackPanel.Visibility = Visibility.Visible; });  
  4.     calibrating = true;  
  5.  } 

8. 實(shí)際測(cè)試結(jié)果分析

對(duì)三星Focus i917(已升級(jí)到Mango,版本號(hào)為7720.68)進(jìn)行Compass測(cè)試,獲得的結(jié)果如下圖2所示:

三星Focus i917設(shè)備的Compass測(cè)試結(jié)果 
圖2:三星Focus i917設(shè)備的Compass測(cè)試結(jié)果

進(jìn)行測(cè)試時(shí),手機(jī)處于豎屏模式(flat mode),而非橫屏模式(portrait mode)。另外,從magnetic heading與true heading的結(jié)果來看,這兩個(gè)數(shù)值相同,因此,我猜想:由于受設(shè)備的傳感器的限制,OS并沒有區(qū)分地磁南北極與地理南北極,而是把地磁的南北極等同于地理的南北極。

希望有HTC設(shè)備的朋友們可以測(cè)試一下,是否支持Gyro?如果支持的話,從Compass獲得的magnetic heading與true heading值是否一致?

參考鏈接:

MSDN:How to: Get Data from the Compass Sensor for Windows Phone

Wiki:magnetic compass and gyro compass

原文鏈接:http://www.cnblogs.com/dearsj001/archive/2011/10/29/CompassOnWP7.html

【編輯推薦】

  1. 在WP開發(fā)中如何使用MVVM Light框架
  2. 在WP7中使用Coding4Fun Button控件
  3. WP7開發(fā)中Coding4Fun的五種彈出框介紹
  4. Windows Phone 7文件下載進(jìn)度和速度顯示
  5. Windows Phone 7 WebBrowser中文亂碼問題
責(zé)任編輯:王曉東 來源: 博客
相關(guān)推薦

2013-02-25 17:42:07

Windows 7卷影復(fù)制

2022-09-29 09:07:08

DataGrip數(shù)據(jù)倉庫數(shù)據(jù)庫

2014-04-08 15:40:57

Windows 8.1

2012-12-26 12:41:14

Android開發(fā)WebView

2009-12-28 17:40:10

WPF TextBox

2010-09-06 14:24:28

ppp authent

2011-07-21 14:57:34

jQuery Mobi

2021-07-27 10:09:27

鴻蒙HarmonyOS應(yīng)用

2010-11-26 16:00:08

Windows Pho

2010-07-16 15:29:02

Windows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho

2010-05-05 13:16:02

Windows PhoWindows CE

2011-06-17 14:16:21

ListBoxWindows Pho

2011-03-21 09:05:40

IronRubyWindows Pho

2009-12-31 17:17:45

Silverlight

2021-01-12 15:19:23

Kubernetes

2017-01-04 15:22:57

TrimPath模板引擎

2010-06-03 17:27:36

Hadoop命令

2010-08-04 15:37:31

Flex圖表

2010-08-05 15:40:21

FlexBuilder
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)