成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Windows Phone 7數字羅盤使用指南

移動開發
為了實現指向,直接使用GPS不就可以了嗎?但現實情況是,如果我們處于建筑物內、或者一些無法接收衛星信號的地方,那么GPS就無法獲取地理位置和方向信息了。在這種情況下,數字羅盤就可以發揮作用了。

1.什么是數字羅盤,和指南針有什么關系?

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

2.數字羅盤的種類

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

3.Windows Phone 7上的數字羅盤

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

WP7兩個版本間傳感器支持的差異:

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

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

4.如何判斷你的Windows Phone 7設備是否支持數字羅盤

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

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

5.Compass提供的數據

Windows Phone 7的Compass,可以提供的數據及其含義如下:

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

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

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

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

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

“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.”

所以,對于這一點,我還是存在疑惑。

6.如何為Windows Phone 7應用程序加入Compass?

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

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

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

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

 (3)手機豎屏模式與橫屏模式對Compass的影響。應用程序從Compass類中獲得的角度信息會根據手機的姿態有所調整,其中主要是橫屏和豎屏模式的區別。判斷手機處于哪種狀態,可以通過加速度傳感器中Z軸的值來實現。

  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的校準

由于受到外部電磁場的干擾,會使得手機的Compass數據精度降低,在這種情況下,我們必須提示用戶遠離磁場干擾,并且對Compass進行校準。在Windows Phone 7上,與CurrentValueChanged一樣,OS為Compass提供了校準事件處理compass_Calibrate。在OS檢測到heading accuracy的絕對值大于20度時,就會觸發該事件。在對Compass進行校準時,一般顯示一個圖片,提示用戶對手機進行繞“8”字移動。

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

8. 實際測試結果分析

對三星Focus i917(已升級到Mango,版本號為7720.68)進行Compass測試,獲得的結果如下圖2所示:

三星Focus i917設備的Compass測試結果 
圖2:三星Focus i917設備的Compass測試結果

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

希望有HTC設備的朋友們可以測試一下,是否支持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開發中如何使用MVVM Light框架
  2. 在WP7中使用Coding4Fun Button控件
  3. WP7開發中Coding4Fun的五種彈出框介紹
  4. Windows Phone 7文件下載進度和速度顯示
  5. Windows Phone 7 WebBrowser中文亂碼問題
責任編輯:王曉東 來源: 博客
相關推薦

2013-02-25 17:42:07

Windows 7卷影復制

2022-09-29 09:07:08

DataGrip數據倉庫數據庫

2014-04-08 15:40:57

Windows 8.1

2010-11-26 16:00:08

Windows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho

2010-07-16 15:29:02

Windows Pho

2010-05-05 13:16:02

Windows PhoWindows CE

2012-12-26 12:41:14

Android開發WebView

2010-09-06 14:24:28

ppp authent

2011-07-21 14:57:34

jQuery Mobi

2021-07-27 10:09:27

鴻蒙HarmonyOS應用

2009-12-28 17:40:10

WPF TextBox

2011-06-17 14:16:21

ListBoxWindows Pho

2011-03-21 09:05:40

IronRubyWindows Pho

2011-06-08 09:43:15

Windows Pho

2010-10-25 14:07:55

Windows Pho

2012-08-16 10:35:50

Windows Pho

2010-12-01 13:40:13

樞軸控件Windows Pho

2010-07-21 14:56:21

Windows Pho

2011-06-07 11:35:38

Windows Pho
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 四虎影院在线免费观看 | 99久久精品国产一区二区三区 | 日韩精品一区二区三区在线观看 | 国产欧美日韩 | 91看片视频 | 国产伦精品一区二区三区视频金莲 | 国产精品久久久久久久7电影 | 日韩视频国产 | 成人av一区 | 欧美中文字幕一区二区三区亚洲 | www.亚洲一区二区三区 | 国产高清一区二区三区 | 日韩精品区| 尤物视频在线免费观看 | 国产日韩精品在线 | 在线欧美| 91高清视频在线观看 | 国产美女特级嫩嫩嫩bbb片 | 亚洲狠狠爱| 国产电影一区二区 | 日韩精品 电影一区 亚洲 | 欧美日韩在线观看一区 | 黄色网址在线免费观看 | 成人精品视频在线观看 | 国产极品车模吞精高潮呻吟 | 欧美另类视频 | 日本不卡免费新一二三区 | 精品国产乱码久久久久久88av | 国产精品成人一区二区三区 | 中文字幕日韩欧美 | 91精品国产91久久久久久丝袜 | 精品久久久久久国产 | 久热m3u8| 久久久久久久久久久成人 | 黄色免费网 | 日韩三级免费网站 | 看毛片的网站 | 一区二区三区福利视频 | 国产中文字幕在线观看 | 福利av在线 | 亚洲男女视频在线观看 |