创建加速度计应用
在 Visual Studio 中创建新的 Windows Phone 应用 项目。此模板在“Windows Phone”类别中。
该应用需要引用包含传感器 API 和 XNA Framework 的程序集,因为加速度计数据采用 XNA Framework Vector3 对象的形式传递。 从“项目”菜单中,单击“添加引用...”,选择“Microsoft.Devices.Sensors”和“Microsoft.Xna.Framework”,然后单击“确定”。
在 MainPage.xaml 文件中,将以下 XAML 代码放置在名为“ContentPanel”的 Grid 元素中。该代码创建两个按钮,一个用于开始从加速度计获取数据,一个用于停止从加速度计获取数据。还创建三个将用于显示数字读数的 TextBlock 元素以及三个将用于采用图形表示读数数据的 Line 元素。Z后,该代码添加一个状态 TextBlock 元素,该元素将用于显示应用的当前状态。
现在,打开 MainPage.xaml.cs 代码隐藏页面并向该页面顶部的其他 using 指令添加传感器和 XNA Framework 命名空间的 using 指令。
在 MainPage 类定义的顶部声明一个类型为 Accelerometer 的变量。
在页面的构造函数中,查看其上运行应用的设备是否支持加速度计传感器。并非所有设备都支持所有传感器,因此使用传感器之前您应该始终进行检查。用下面的代码替换现有的页面构造函数。
为“开始”按钮添加单击事件的处理程序。根据上面添加 XAML 代码的方式,Visual Studio 可能已为您添加此处理程序。如果是这样,则删除该处理程序中的任何代码。如果未自动添加该处理程序,请将下面的空函数复制并粘贴到 MainPage 类定义中。
在“开始”按钮单击处理程序中,查看加速度计对象是否为 null,在初始化该对象之前该对象应该为 null。如果加速度计为 null,则使用构造函数初始化该对象。接下来,通过设置 TimeBetweenUpdates 属性设置您希望从加速度计接收数据的速度。默认值为 2 毫秒。 接下来,为 CurrentValueChanged 事件设置处理程序。将以下代码粘贴到空的“开始”按钮单击处理程序中。
现在,使用 Start() 方法启动加速度计。调用 Start 有可能会失败,因此您应该将此调用放置在一个 try 块中。在 catch 块中,您可以警告用户加速度计可能无法启动。将该代码粘贴到“开始”按钮单击处理程序中,放置在之前的代码部分之后。
现在,实现 CurrentValueChanged 事件处理程序。具有新加速度计数据的系统会以使用 TimeBetweenUpdates 指定的频率调用该方法。该处理程序接收包含加速度计数据的 AccelerometerReading 对象。在对 UI 没有访问权限的后台线程上调用该处理程序。因此,该事件处理程序使用 Dispatcher.Invoke 方法,该方法在 UI 线程上调用指定的代码。Dispatcher.Invoke 用于调用将在下一步中定义的 UpdateUI 并传递 AccelerometerReading 对象。
实现将向用户显示加速度计数据的 UpdateUI 方法。此方法首先更新状态 TextBlock 以指示正在接收数据。接下来,更新三个 TextBlock 对象以显示传感器每个轴上的加速度数值。Z后,更新 Line 对象以采用图形的形式演示加速度。
Z后一步是实现将允许用户停止从加速度计获取数据的“停止”按钮单击处理程序。再次,如果编辑器自动添加了该处理程序,则将此处理程序的内容替换为以下内容。