<WP7>window phone 加速器(重力感应)初体验

原创 2012年03月22日 20:31:57

从我的网易博客移过来的。。。。


WP7的加速感应器。也就是日常所说的实现重力感应的模块。Windows Phone

设备中的加速度感应器是用来度量3个坐标轴加速度的装置。大致坐标如下:


 

 我们所需要做的就是从Accelerometer对象中读取到相应的数据。

 

//MainPage.xaml的代码主要是在ContentPanel中加入以下代码
<Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="300" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="100"/>
            </Grid.RowDefinitions>
            <TextBlock Text="X:" Grid.Column="0" Grid.Row="0" Width="88"  Height="82"
                       HorizontalAlignment="Left"
                  VerticalAlignment="Top" FontSize="50"    />
            <TextBox x:Name="TBX" Width="300" Height="80" Grid.Column="1" 
                     HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="0" />
            <TextBlock Text="Y:" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBY" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left"
                     VerticalAlignment="Top" Width="300" Height="80"/>
            <TextBlock Text="Z:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBZ" Grid.Column="1" Grid.Row="2" Width="300" Height="80"
                     HorizontalAlignment="Left" VerticalAlignment="Top"/>
            <TextBlock Text="CX:" Grid.Column="0" Grid.Row="3" Width="88"  Height="82"
                       HorizontalAlignment="Left"
                  VerticalAlignment="Top" FontSize="50"    />
            <TextBox x:Name="TBCX" Width="300" Height="80" Grid.Column="1" 
                     HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="3" />
            <TextBlock Text="CY:" Grid.Row="4" Grid.Column="0" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBCY" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Left"
                     VerticalAlignment="Top" Width="300" Height="80"/>
            <TextBlock Text="CZ:" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Left"
                       VerticalAlignment="Top" Width="90" Height="80" FontSize="50"/>
            <TextBox x:Name="TBCZ" Grid.Column="1" Grid.Row="5" Width="300" Height="80"
                     HorizontalAlignment="Left" VerticalAlignment="Top"/>
        </Grid>

效果如下:

 
在MainPage.xaml.cs添加代码前,先添加两个引用。
一个是Microsoft.Devices.Sensors (使用Accelerometer类)
另一个是MicroSoft.Xna.Framework (主要用到的是Vector3类)

//MainPage.xaml.cs代码
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;
using Microsoft.Devices.Sensors;
namespace AccelerometerDemo
{
    public partial class MainPage : PhoneApplicationPage
    {
        Accelerometer acc;
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            if (!Accelerometer.IsSupported)
            {
                MessageBox.Show("该设备不支持加速器");
            }
            else
            {
                acc = new Accelerometer();
                acc.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(acc_CurrentValueChanged);
//微软推荐的是这个CurrentValueChanged方法来获取当前的坐标值。
                acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged);//这个方法已经过时,但是还是能用
                acc.Start();
            }  
        }
        void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
        }
        void ThreadSafeAccelerometerChanged(AccelerometerReadingEventArgs e)
        {
            TBX.Text = e.X.ToString("0.000");
            TBY.Text = e.Y.ToString("0.000");
            TBZ.Text = e.Z.ToString("0.000");
        }
        void acc_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
        }
        void ThreadSafeAccelerometerChanged(SensorReadingEventArgs<AccelerometerReading> e)
        {
     //e.SensorReading.Acceleration就是Vector3类
            TBCX.Text = Convert.ToString(e.SensorReading.Acceleration.X);
            TBCY.Text = Convert.ToString(e.SensorReading.Acceleration.Y);
            TBCZ.Text = Convert.ToString(e.SensorReading.Acceleration.Z);
        }
        
    }
}


 模拟器结果:
模拟器与真机都测试通过

电子罗盘

电子罗 种重要的导航工具,能实时提供移动物体的航向和姿态。随着半导体工艺的进步和手机操作系统的发展,集成了越来越多传感器的智能手机变得功能强大,很多手机上都实现了电子罗盘的功能。而基于电子罗盘的应用(...
  • ryder001
  • ryder001
  • 2012年09月25日 14:47
  • 3662

Android重力感应开发

一、手机中常用的传感器 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用,具体如下:(Sensor类) #define SENSOR_TYPE_ACCE...
  • mad1989
  • mad1989
  • 2014年03月09日 16:56
  • 63661

android 重力感应监听

public class ShakeListener implements SensorEventListener { public static ShakeListener sensor1; /...
  • jiangxuchen
  • jiangxuchen
  • 2012年02月22日 16:44
  • 4480

Android重力感应开发

Android重力感应开发 一、手机中常用的传感器 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用,具体如下:(Sensor类) ...
  • u011506413
  • u011506413
  • 2016年06月02日 19:07
  • 538

WP7屏蔽重力感应

注册表进入[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Gsensor] 修改index的值为0, 然后就可以享受无重力生活了。想启用改成1就行,重启生效 修改的时候,...
  • debugm
  • debugm
  • 2012年02月13日 15:02
  • 440

WP7入门篇(一)开发环境搭建以及相关学习资源

wp7入门篇,首先整理对于wp7应用开发的准备工作,如下 需要的环境配置 一、在没有安装vs2010最终版情况下可以使用一下方法 Windows Phone SDK 7.1下载地址  visu...
  • changwei07080
  • changwei07080
  • 2012年03月26日 16:26
  • 420

Android开发-Sensor传感器-AndroidStudio(二)小方

转载请注明出处:http://blog.csdn.net/iwanghang/article/details/53418690我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~http:...
  • iwanghang
  • iwanghang
  • 2016年12月01日 10:12
  • 869

Android的重力传感器(3轴加速度传感器)简单实例

重力感应主要是依靠手机的加速度传感器(accelerometer)来实现         在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器。因为很多功能用户根本不care...
  • itas109
  • itas109
  • 2013年08月23日 17:18
  • 6462

电脑上安装windows phone 8模拟器(wp8) 和wp8手机解锁 详细教程 wp7也适用

以前久闻windows phone 手机盛名,不久前忍痛洒泪花了1899大洋,终于买了一部Nokia lumia 620。本机在淘宝有1600即可入手,我为了放心点选了天猫商城里的,还配了16G SD...
  • ab6326795
  • ab6326795
  • 2013年02月10日 23:20
  • 26162

Windows Phone开发(二)-- 框架结构和启动过程

上一篇文章介绍了Windows Phone的开发环境和一个简单的Windows Phone程序的演示和结构,这一篇文章要深入一点,介绍Windows Phone的框架结构和程序启动的过程。 一 Win...
  • cc_net
  • cc_net
  • 2011年06月21日 02:18
  • 6865
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:<WP7>window phone 加速器(重力感应)初体验
举报原因:
原因补充:

(最多只允许输入30个字)