與眾不同windows phone (18)

來源:互聯網
上載者:User

Device(裝置)之加速度感應器, 數字羅盤感應器

介紹

與眾不同 windows phone 7.5 (sdk 7.1) 之裝置

加速度感應器(加速度計)

數字羅盤(磁力計)

樣本

1、示範如何使用加速度感應器

AccelerometerDemo.xaml

<phone:PhoneApplicationPage      x:Class="Demo.Device.AccelerometerDemo"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    FontFamily="{StaticResource PhoneFontFamilyNormal}"    FontSize="{StaticResource PhoneFontSizeNormal}"    Foreground="{StaticResource PhoneForegroundBrush}"    SupportedOrientations="Portrait" Orientation="Portrait"    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"    shell:SystemTray.IsVisible="True">        <Grid x:Name="LayoutRoot" Background="Transparent">         <StackPanel Orientation="Vertical">                            <TextBlock Name="lblAccelerometerSupported" />             <Button Name="btnStart" Content="開啟加速度感應器" Click="btnStart_Click" />             <Button Name="btnStop" Content="關閉加速度感應器" Click="btnStop_Click" />             <TextBlock Name="lblAccelerometerStatus" />             <TextBlock Name="lblTimeBetweenUpdates" />             <TextBlock Name="lblMsg" />                        </StackPanel>     </Grid>    </phone:PhoneApplicationPage>

AccelerometerDemo.xaml.cs

/*  * 示範如何使用加速度感應器  *   * Accelerometer - 用於訪問裝置中的加速度計  *     IsSupported - 裝置是否支援加速度感應器  *     IsDataValid - 是否可從加速度感應器中擷取到有效資料  *     CurrentValue - 加速度感應器當前的資料,AccelerometerReading 類型  *     TimeBetweenUpdates - 觸發 CurrentValueChanged 事件的時間間隔,如果設定的值小於 Accelerometer 允許的最小值,則此屬性的值將被設定為 Accelerometer 允許的最小值  *     State - 加速度計的當前的狀態(Microsoft.Devices.Sensors.SensorState 枚舉)  *         NotSupported - 裝置不支援加速度感應器  *         Ready - 加速度感應器已準備好,並且正在解析資料  *         Initializing - 加速度感應器正在初始化  *         NoData - 加速度感應器無法擷取資料  *         NoPermissions - 無許可權調用加速度感應器  *         Disabled - 加速度感應器被禁用  *     Start() - 開啟加速度計  *     Stop() - 關閉加速度計  *     CurrentValueChanged - 加速度感應器擷取到的資料發生改變時所觸發的事件,屬性 TimeBetweenUpdates 的值決定觸發此事件的時間間隔  *       * AccelerometerReading - 加速度感應器資料  *     Acceleration - 詳細資料,Vector3 類型的值  *     DateTimeOffset - 從加速度感應器中擷取到資料的時間點  *       *   *   * 關於從加速度感應器中擷取到的 Vector3 類型的值中 X Y Z 的解釋如下  * 手機座標系:以手機位置為參照,假設手機垂直水平面放(豎著放),螢幕對著你,那麼  * 1、左右是 X 軸,右側為正方向,左側為負方向  * 2、上下是 Y 軸,上側為正方向,下側為負方向  * 3、裡外是 Z 軸,靠近你為正方向,遠離你為負方向  * 以上可以用相對於手機位置的右手座標系來理解  * X Y Z 的值為中心點到地平面方向的線與各個對應軸線正方向的夾角的餘弦值  */   using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls;    using Microsoft.Devices.Sensors; using Microsoft.Xna.Framework;    namespace Demo.Device {     public partial class AccelerometerDemo : PhoneApplicationPage     {         private Accelerometer _accelerometer;            public AccelerometerDemo()         {             InitializeComponent();                // 判斷裝置是否支援加速度感應器             if (Accelerometer.IsSupported)             {                 lblAccelerometerStatus.Text = "此裝置支援加速度感應器";             }             else            {                 lblAccelerometerStatus.Text = "此裝置不支援加速度感應器";                                    btnStart.IsEnabled = false;                 btnStop.IsEnabled = false;             }         }            private void btnStart_Click(object sender, RoutedEventArgs e)         {             if (_accelerometer == null)             {                 // 執行個體化 Accelerometer,註冊相關事件                 _accelerometer = new Accelerometer();                 _accelerometer.TimeBetweenUpdates = TimeSpan.FromMilliseconds(1);                 _accelerometer.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(_accelerometer_CurrentValueChanged);                    lblTimeBetweenUpdates.Text = "TimeBetweenUpdates 設定為 1 毫秒,實際為 " + _accelerometer.TimeBetweenUpdates.TotalMilliseconds.ToString() + " 毫秒";             }                try            {                 // 開啟加速度感應器                 _accelerometer.Start();                 lblAccelerometerStatus.Text = "加速度感應器已開啟";             }             catch (Exception ex)             {                 lblAccelerometerStatus.Text = "加速度感應器已開啟失敗";                 MessageBox.Show(ex.ToString());             }         }            private void btnStop_Click(object sender, RoutedEventArgs e)         {             if (_accelerometer != null)             {                 // 關閉加速度感應器                 _accelerometer.Stop();                 lblAccelerometerStatus.Text = "加速度感應器已關閉";             }         }            void _accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)         {             // 註:此方法是在後台線程啟動並執行,所以需要更新 UI 的話注意要調用 UI 線程             Dispatcher.BeginInvoke(() => UpdateUI(e.SensorReading));         }                    // 更新 UI         private void UpdateUI(AccelerometerReading accelerometerReading)         {             Vector3 acceleration = accelerometerReading.Acceleration;                // 輸出 X Y Z 的值             lblMsg.Text = "acceleration.X: " + acceleration.X.ToString("0.0");             lblMsg.Text += Environment.NewLine;             lblMsg.Text += "acceleration.Y: " + acceleration.Y.ToString("0.0");             lblMsg.Text += Environment.NewLine;             lblMsg.Text += "acceleration.Z: " + acceleration.Z.ToString("0.0");         }     } }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.