有没有办法使用SDK将时钟与Microsoft Band同步?

时间:2016-09-11 20:52:11

标签: android microsoft-band

我正在开展一个项目,我需要来自Band的传感器数据读数和连接的智能手机进行同步。因此,我需要能够找出两个设备之间的时钟差异。事件包含一个时间戳,我可以用它来进行同步,但这需要一种方法可靠地强制Band根据请求发送传感器直接

  1. 智能手机请求从频段读取传感器(例如,通过注册事件监听器)并记录请求传输的本地时间t1
  2. 乐队收到请求并直接回复,发送当地时间戳s1
  3. 智能手机会在当地时间t2收到回复。
  4. 现在,智能手机可以近似连接延迟d = (t2 - t1)/2,并可以将其本地时间设置为s1 + d,以便与乐队大致同步。如果Band在合理的时间内响应,该协议只能正常工作。

    getSensorManager().registerXXXEventListener()是否有这样的行为,或者是否有可能延迟响应(f.e。以节省能量)?如果它可能引入延迟,还有其他方法来获得乐队的当前时间吗?

2 个答案:

答案 0 :(得分:1)

似乎有自动同步。如果您将频段的时钟设置为其他时间并打印SDK的时间戳,您会注意到它对应于电话时间,而不是频段时间。 所以我猜电话和乐队之间不需要时间同步。

答案 1 :(得分:0)

抓住传感器并挂钩相应的时间戳?不要带乐队,但我相信ISensorReading :: Timestamp来自设备?

按照定义,退出对象浏览器......

如果有效,请告诉我们......

namespace Microsoft.Band.Sensors
{
public class BandSensorReadingEventArgs<T> : EventArgs where T : IBandSensorReading
{
    public BandSensorReadingEventArgs(T reading);

    public T SensorReading { get; }
}
}

System.DateTimeOffset 时间戳 {get; Microsoft.Band.Sensors.IBandSensorReading

的成员
    private async void HeartRate_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandHeartRateReading> e)
    {
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () =>
        {
            TextBlock_HeartBeatStatus.Text = e.SensorReading.HeartRate.ToString();
            DateTimeOffset timestamp = e.SensorReading.Timestamp;
        });
    }
    private async void Accelerometer_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandAccelerometerReading> e)
    {
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () =>
        {
            string status = 
            $"x:{e.SensorReading.AccelerationX.ToString("F1")} y:{e.SensorReading.AccelerationY.ToString("F1")} z:{e.SensorReading.AccelerationZ.ToString("F1")}";       
            TextBlock_AccelStatus.Text = status;
        });
        DateTimeOffset timestamp = e.SensorReading.Timestamp();
    }