Windows Phone笔记(5)加速计和位置服务
这篇笔记主要是讲述如Windows Phone中两个提供外界信息的设备以及如何在程序中适用它们,在用户授权允许的情况下,加速计能够获取当前手机设备的具体方向;而位置服务则可以对手机当前所在地的位置进行定位。
1.传感器之加速计
加速计时Windows Phone手机中的一个硬件设备,加速计测量在某一时刻施加于设备的力。可以使用这些力来确定用户正在向哪个方向移动设备。加速度值采用 3 维矢量表示,该矢量表示在 X、Y 和 Z 轴中的加速度分量(采用重力单位)。当设备面朝平台时,加速度的方向相对于设备以便对 Z 轴应用 -1g,当垂直于平台顶部放置设备时,对 Y 轴应用 -1g。从加速计的这些特性我们可以知道,Windows Phone中的程序中处理方向改变的基础。加速度也会对突然的移动做出响应,比如摇晃(微信中的摇一摇功能)等等。对于加速计的使用,创意是对开发人员最大的挑战。
程序使用加速计需要引用Microsoft.Devices.Sensors库,并且在Properties文件夹中的WMAppManifest.xml文件中设置(这是默认设置):
<Capability Name="ID_CAP_SENSORS"/>
下面让我们通过观察一个示例程序,该程序获取加速计测量的数据,并使用Line元素和TextBlock元素展示出来:
这是MainPage.xaml页面的代码:
1 <!--ContentPanel - 在此处放置其他内容-->
2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
3 <StackPanel Orientation="Vertical">
4 <StackPanel Orientation="Horizontal">
5 <TextBlock Text="状态:" Margin="10 0"/>
6 <TextBlock Name="txtblkAccelerometerState" Text="停止采集数据"/>
7 </StackPanel>
8 <StackPanel Orientation="Horizontal">
9 <TextBlock Text="更新加度计数据时间:" Margin="10 0"/>
10 <TextBlock Name="txtblkupdateDataAccelerometer" Text="20ms"/>
11 </StackPanel>
12 <Grid>
13 <TextBlock Height="45" HorizontalAlignment="Left" Name="txtblkX" Text="X:1.0" VerticalAlignment="Top" Foreground="Red" FontWeight="Bold" FontSize="28" Margin="10 0" />
14 <TextBlock Height="45" HorizontalAlignment="Center" Name="txtblkY" Text="Y:1.0" VerticalAlignment="Top" Foreground="Green" FontWeight="Bold" FontSize="28" />
15 <TextBlock Height="45" HorizontalAlignment="Right" Name="txtblkZ" Text="Z:1.0" VerticalAlignment="Top" Foreground="Blue" FontWeight="Bold" FontSize="28" Margin="10 0" />
16 </Grid>
17 <Grid Height="300">
18 <Line x:Name="xLine" X1="240" Y1="150" X2="340" Y2="150" Stroke="Red" StrokeThickness="4"></Line>
19 <Line x:Name="yLine" X1="240" Y1="150" X2="240" Y2="60" Stroke="Green" StrokeThickness="4"></Line>
20 <Line x:Name="zLine" X1="240" Y1="150" X2="190" Y2="200" Stroke="Blue" StrokeThickness="4"></Line>
21 </Grid>
22 <Button Content="开始采集" Margin="0 100" Name="btnSwitch" Click="btnSwitch_Click"></Button>
23 </StackPanel>
24 </Grid>
这是MainPage.xaml.cs后台处理程序:
public partial class MainPage : PhoneApplicationPage
{
Accelerometer accelerometer;
DispatcherTimer timer;
Vector3 acceleration;
bool isDataValid;
// 构造函数
public MainPage()
{
InitializeComponent();
if (!Accelerometer.IsSupported)
{
txtblkAccelerometerState.Text = "设备不支持加速计";
}
else
{
//初始化timer,并绑定Tick事件
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(30);
timer.Tick += new EventHandler(timer_Tick);
}
}
/// <summary>
///
补充:移动开发 , Windows Phone ,