当前位置:编程学习 > wap >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,