Windows Phone中Motion API和Accelerometer的区别

时间:2014-02-14 07:39:28

标签: windows-phone-7 windows-phone accelerometer

我在Windows Phone应用程序中使用Motion API,但并非所有设备都支持Motion API。但是在Windows Phone中存在支持大多数设备的Accelerometer API。

我使用这些API有什么区别?请看这两个代码块:

使用Motion API:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (motion == null)
    {
        motion = new Motion();
        motion.TimeBetweenUpdates = TimeSpan.FromMilliseconds(15);
        motion.CurrentValueChanged += OnSensorReadingChangedMotion;
        motion.Start();
    }         
}

private void OnSensorReadingChangedMotion(object sender, SensorReadingEventArgs<MotionReading> e)
{
    Dispatcher.BeginInvoke(() => CurrentValueChangedMotion(e.Gravity.X, e.Gravity.Y, e.Gravity.Z));
}

使用Accelerometer:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
     if (_accelerometer == null)
     {
        _accelerometer = new Accelerometer();
     }

    _accelerometer.TimeBetweenUpdates = TimeSpan.FromMilliseconds(15);
    _accelerometer.CurrentValueChanged += OnSensorReadingChangedAccel;

    _accelerometer.Start();       
}

 private void OnSensorReadingChangedAccel(object sender, SensorReadingEventArgs<AccelerometerReading> sensorReadingEventArgs)
 {
     Dispatcher.BeginInvoke(() => CurrentValueChangedAccelerometer(sensorReadingEventArgs.SensorReading.Acceleration.X, sensorReadingEventArgs.SensorReading.Acceleration.Y, sensorReadingEventArgs.SensorReading.Acceleration.Z));
 }

我发现加速度计读数更不稳定。 我需要为我的应用使用向量{x,y,z}。

之间的实际区别是什么
{.SensorReading.Acceleration.X, .SensorReading.Acceleration.Y,.SensorReading.Acceleration.Z}

{e.Gravity.X, e.Gravity.Y, e.Gravity.Z}

如果我使用类似的矢量,Motion API和Accelerometer有什么区别?

1 个答案:

答案 0 :(得分:1)

区别在于:

来自加速度计的

Acceleration属性包括重力和动作引起的力,当Motion API的Gravity属性重力时(使用多个计算)传感器然后与电话运动引起的力量分开。)

根据this MSDN post

  

加速计传感器检测重力以及手机移动产生的任何力。使用Motion类访问的组合运动API使用多个设备传感器将重力矢量与设备加速度分开,并允许您轻松确定设备的当前姿态(偏航,俯仰和滚转)。