31天学会Windows Phone 7开发:加速感应器

移动开发
本文是《Windows Phone 7开发31日谈》系列的第十一篇文章,上一篇,我们讨论了Windows Phone的软键盘。本文,来谈谈基于硬件的加速感应器以及如何利用它提供的信息。

上一篇,我们讨论了Windows Phone的软键盘。本文,来谈谈基于硬件的加速感应器以及如何利用它提供的信息。

什么是加速感应器?

目前缺乏一个更好的定义,Windows Phone设备中的加速度感应器是用来度量3个坐标轴加速度的装置,这里说的加速度是相对于自由落体加速度的。除了一个时间戳之外,值都是用重力值(G)表示的(1G = 9.81 m/s2)。这意味着如果将电话正面朝上平放在一个绝对的平面上,Z轴应该为-1.0,其他两个轴的数据为0。下面的图例演示了不同的值(感谢的来自于WindowsTeamBlog的图片):

加速感应器

如何从WP7的加速感应器中获取数据?

幸好,这非常简单。复杂的是我们需要管理一些线程,但其实也很简单。下面是我们所要做的:

1.初始化一个Accelerometer对象。

2.创建一个ReadingChanged()事件处理程序来监视数据的变化。

3.将事件中的结果传回我们的页面线程(这个事件是在另一个线程中触发的)。

4.在程序中使用这些数据。

这是我这个例子中MainPage.xaml.cs的全部内容。你会看到我在MainPage.xaml文件中创建了3个TextBlock(XText, YText和ZText) ,所以我可以在屏幕中显示这些值。同样还可以看到我添加了一个Microsoft.Devices.Sensors名称空间的引用来访问Accelerometer类。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12. using Microsoft.Phone.Controls;  
  13. using Microsoft.Devices.Sensors;  
  14.  
  15. namespace Day11_Accelerometer  
  16. {  
  17.  public partial class MainPage : PhoneApplicationPage  
  18.  {  
  19.   Accelerometer acc = new Accelerometer();  
  20.  
  21.   // Constructor  
  22.   public MainPage()  
  23.   {  
  24.    InitializeComponent();  
  25.    acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged);  
  26.    acc.Start();  
  27.   }  
  28.  
  29.   void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)  
  30.   {  
  31.    Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));  
  32.   }  
  33.  
  34.   void ThreadSafeAccelerometerChanged(AccelerometerReadingEventArgs e)  
  35.   {  
  36.    XText.Text = e.X.ToString("0.000");  
  37.    YText.Text = e.Y.ToString("0.000");  
  38.    ZText.Text = e.Z.ToString("0.000");  
  39.   }  
  40.  }  

 

模拟器不能模拟加速感应器的数据

是的。如果你下载了本文***的代码,肯定会纳闷为什么Z轴数据总是-1呢,这是因为模拟器认为它是在平面上的。它没有(有效的)方法来模拟加速感应器的数据。但是有一些聪明人找到了让这成为现实的方法。本篇文章剩下的部分让我很为难。我很想给每个模拟器解决方案写一个例子,但是还有这么多好的方法来模拟加速感应器数据,我认为让你们知道这些比仅仅写代码示例要好。这有很多建议供你去实验(每个站点都提供了代码示例):

Reactive Extensions

Reactive Extensions是一个框架允许你为加速感应器(还有位置服务,我会在第13日中介绍)模拟数据而无需真实设备。实际上你无法控制这个动作,它只能给你产生随机数据。安装起来非常简单,而且相比于因为没有真实的手机而不能开发来说十分地高效。

accelKit

这个可能是最酷的选择了。它利用摄像头和增强现实,允许你移动手机的打印图就像在真实世界中移动它一样。它是如此的酷以至于使我神魂颠倒,有两点原因:

1.它允许你真正地模拟动作。

2.它利用了增强现实,人。这是一个了不起的技术应用。

WiimoteLib

这个库不仅仅能用于Windows Phone模拟器,不过它确实可以为我们的目的非常好的工作。故事是这样的:如果你有一个任天堂的Wii,你可以用控制器(一个Wii遥控器)来生成你的加速感应器数据。

Windows Mobile Unified Sensor API

是的,就是“Windows Mobile”。这是在某些类型的Windows Mobile 6.x 设备上与加速感应器交互的方式。这篇文章描述了一种利用这种技术在Windows Phone上开发的方法。他们好像没有提供代码示例,但看起来非常简单。

下载代码示例

原作者:Jeff Blankenburg    译者:金山崟霸

中文来源:http://www.cnblogs.com/porscheyin/archive/2010/12/22/1914215.html

英文来源:http://www.jeffblankenburg.com/2010/10/11/31-days-of-windows-phone-day-11-accelerometer/

【编辑推荐】

  1. 31天学会Windows Phone 7开发:输入范围和文本框
  2. 31天学会Windows Phone 7开发:调试技巧
  3. 31天学会Windows Phone 7开发:选择器
  4. 31天学会Windows Phone 7开发:启动器
  5. 31天学会Windows Phone 7开发:工具栏
责任编辑:王晓东 来源: 博客
相关推荐

2012-06-20 10:21:50

Windows Pho

2012-06-21 10:59:31

Windows Pho

2012-08-02 10:16:39

Windows Pho

2012-06-13 13:01:57

Windows Pho

2012-06-11 13:08:10

Windows Pho

2012-06-12 10:43:20

Windows Pho

2012-08-09 13:39:22

Windows Pho

2012-08-01 10:26:33

Windows Pho

2012-08-16 11:31:30

Windows Pho

2012-06-06 13:48:34

Windows Pho

2012-08-13 09:56:45

Windows Pho

2012-06-25 16:14:26

Windows Pho

2012-06-07 09:33:13

Windows Pho

2012-07-24 10:15:34

Windows Pho

2012-06-19 09:31:53

Windows Pho

2012-07-13 14:41:12

2012-07-31 09:44:27

Windows Pho

2012-06-29 14:13:10

2013-04-19 16:52:24

Windows PhoWindows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho
点赞
收藏

51CTO技术栈公众号