我在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有什么区别?
答案 0 :(得分:1)
区别在于:
来自加速度计的 Acceleration
属性包括重力和动作引起的力,当Motion API的Gravity
属性仅重力时(使用多个计算)传感器然后与电话运动引起的力量分开。)
加速计传感器检测重力以及手机移动产生的任何力。使用Motion类访问的组合运动API使用多个设备传感器将重力矢量与设备加速度分开,并允许您轻松确定设备的当前姿态(偏航,俯仰和滚转)。