windows phone 加速计

简介:

在windows phone 中存在着加速计,我们可以利用加速计获得用户手机的状态,根据手机状态调整我们的程序,这样会更人性化;windows phone 加速计采用的是三轴坐标定位即在三维空间中的坐标,加速计在三维空间中的点(x,y,z)是矢量的,包含大小和方向,方向就是从原点(0,0,0)到三维 空间中的点(x,y,z),矢量的大小则是毕达格斯定理(貌似是高中有学到过),公式为√a^2+b^2+c^2;加速计原理详细见http://www.cnblogs.com/liuq0s/archive/2010/09/14/1825908.html

首先是命名空间的引用:

// 引用
// Accelerometer类用到
using Microsoft.Devices.Sensors;
// Dispatcher类用到
using System.Windows.Threading;

 

在xaml文件中定义一个textblock 用于显示一个点的坐标,矢量的大小和时间戳:

<TextBlock x:Name= " txtCoordinates " Text= " 显示三轴坐标 " HorizontalAlignment= " Center " VerticalAlignment= " Center "  Grid.Row= " 1 "></TextBlock>

 隐藏代码文件如下:

View Code
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;
// 引用
// Accelerometer类用到
using Microsoft.Devices.Sensors;
// Dispatcher类用到
using System.Windows.Threading;

namespace GetAccelerometerCoordinates
{
     public  partial  class MainPage : PhoneApplicationPage
    {
         //  构造函数
         public MainPage()
        {
            InitializeComponent();
             // 实例化加速计--知识点①
            Accelerometer acc =  new Accelerometer();
             // 加速计值发生变化是发生--知识点②
            acc.ReadingChanged +=  new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged);
             try
            {
                 // 开始获取加速计数据
                acc.Start();
            }
             catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
           
        }
         // 当加速计值改变时发生--知识点③
         void acc_ReadingChanged( object sender, AccelerometerReadingEventArgs e)
        {
             string str =  " x: " + e.X +  " ;\nY: " + e.Y +  " ;\nZ: " + e.Z +  " ;\n矢量大小: " + Math.Sqrt(e.Z * e.Z + e.Y * e.Y + e.X * e.X) +  " ;\n时间戳: " + e.Timestamp;

             // 确定嗲用线程是否可以访问此对象--知识点④
             if (txtCoordinates.CheckAccess())
            {
                txtCoordinates.Text = str;
            }
             else
            {
                 // 线程中异步实现txtCoordinates赋值--知识点⑤
                txtCoordinates.Dispatcher.BeginInvoke( new SetTextDel(SetText), txtCoordinates, str);
            }
        }
         // 委托
         delegate  void SetTextDel(TextBlock txtCoordinates,  string str);
         // 方法
         void SetText(TextBlock txtCoordinates,  string str)
        {
            txtCoordinates.Text = str;
        }
    }
}

 知识点①:Accelerometer类提供了访问加速计的访问

   属性:

   

State

加速計狀態,為枚舉類型,在使用start方法之前可先獲取加速計狀態,看加速計是否可用

CurrentValue

獲得加速計,羅盤,的相關數據,

IsDataValid

获取传感器数据的有效性,true為有效,false為無效

IsSupported

應用程序是否支持加速計,支持则为 true;否则为 false

TimeBetweenUpdates

獲取CurrentValueChanged 事件之间的首选时间

  知识点ReadingChanged事件在windows phone os 7.1中已过期,建议使用CurrentValueChanged使用方法和ReadingChanged方法类似

 

  知识点③ :该事件中的传递的参数,通过该参数可以获得在三维空间中的坐标,并可根据坐标值进行运算,如获得矢量值

  知识点④:CheckAccess方法表示是否可以访问UI线程,如果可以我们可以直接赋值textblock,如果不可以就的跨线程操作

  知识点⑤:Dispatcher类用于管理线程工作项队列,其中BeginInvoke(Delegate, Object())方法用于线程上的指定参数数组以异步方式执行指定委托,这里定义的委托和方法参数一致

 

效果图:此效果图是在模拟器中的坐标,在模拟器中的坐标会一直是这样,不会改变,可以在windows phone手机中获得真是的数值

 小结:加速计是获取外部信息的设备,除此之外windows phone还有定位服务, 个人理解手机在三维空间的中的坐标,类似于对重力的一种分解,还望高手指点迷津



本文转自shenzhoulong  51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/830577,如需转载请自行联系原作者

相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1247 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
133 0
Windows Phone快速入门需掌握哪些能力
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
162 0
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
230 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
Windows 数据安全/隐私保护 C#