同步在多个Android设备上记录数据的时间

Mxy*_*xyk 7 time gps android

这个问题可能略显啰嗦,但对许多建议持开放态度.


问题陈述:
我们有几个API级别8(Android 2.2)MyTouch设备,我们将用它们来记录游乐园的加速度数据,即过山车.我们还有一个可视化功能,允许我们绘制和查看加速度计点作为记录时间的函数.这就是我们陷入两难的地方!Android设备上的系统时间并不完全相同,也不能以毫秒精度设置为同一时间(仅手动精确分钟,这很糟糕).


解决方案尝试:
因此,我首先根据应用程序启动时发现的GPS时间记录数据.长进程短:获取GPS时间,获取系统时间,获得差异,并在记录数据点时,再次获得系统时间并将差异添加回时间,标记为记录的开始时间,并为每个增加200毫秒从那里记录数据点.但是,有2个问题(获取GPS时间):

  • 使用getLastKnownLocation()不太准确.实际上,它似乎非常不准确.它给我的时间比目前的GMT/UTC时间少9分钟.巧合的是,Android设备上的系统时间也接近9分钟...... GPS时间和系统时间之间的差异通常在1000到5000毫秒(1到5秒)之间.我想我的代码有可能是错的.我把它贴在下面给你看.

  • requestSingleUpdate()会很好用,因为它会得到一个更近的位置,也许是一个非常准确的时间.问题?需要API级别9 ...我们没有的设备.


想法:
这是我的想法 - 如果我以某种方式从网站上抽出全球时间并使用从那里拉出的时间作为录制时间怎么办?问题在这里 - 我不知道该怎么做,这只是我的一厢情愿......

另一个想法 - 是否存在某些getTime()我根本不知道的全局函数?


推理为什么我想让Android从类似的时钟中抽出时间:
想象一下两个人坐在过山车上 - 一个在前排座位上,一个在后排座位上.在记录数据时,前面的人显然会在后面的人之前略微加速(我们希望在我们的可视化图上看到这一点).这就是为什么以毫秒精度确定这些点是根据单个全球时间记录的原因.


码:

Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_FINE);

if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    mLocationManager.requestLocationUpdates(mLocationManager.getBestProvider(c, true), 0, 0, AmusementPark.this);
    Criteria criteria = new Criteria();
    String bestProvider = mLocationManager.getBestProvider(criteria, false);
    Location location = mLocationManager.getLastKnownLocation(bestProvider);

    try {

        gpsTime = location.getTime();
        systemTime = System.currentTimeMillis();
        timeDif = gpsTime - systemTime;
        Log.e("timedif", "GPS: " + gpsTime + ", System: " + systemTime +", Dif: " + timeDif);

    } catch (NullPointerException e){

    }

}
Run Code Online (Sandbox Code Playgroud)

更新:
在这里,有人建议一种"服务器" getTime().我真的很喜欢他的代码/答案,但这是什么"服务器"和/或如何设置一个,如果这是最好的解决方案?

Otr*_*tra 2

我认为响应者在那篇文章中提到的“服务器”是指建立一个专用的时间服务器。基本上,您将设置一些硬件,所有使用您的应用程序的人都会连接到这些硬件,以便获得时间。这可能比您愿意付出的努力更多。

你需要以下内容,

  1. 一些备用硬件(可以像运行 tomcat 的计算机一样简单,也可以像专用服务器机架一样复杂,具体取决于您认为将使用您的应用程序的人数。)或对域服务器/网络主机的订阅。

  2. 某些 Web 服务只会在应用程序请求时返回时间。

  3. 您需要公开您的服务器/网络服务,这是另一个令人头疼的问题。

我不确定这是否是您的最佳解决方案,因为它将依赖于网络连接来到达您的专用服务器。您可以尝试以下几种替代解决方案:

我不知道您的应用程序是否会公开或专门用于研究。如果是后者,并且是与一群您认识并可以协调的人进行,我实际上建议您下载 ClockSync,将您的手机同步到同一时间服务器,然后执行您的应用程序。

如果您的应用程序将分发给您不会联系的人,那么您最好的选择可能是让您的应用程序连接到一台 ntp 服务器并以这种方式获取时间。以下是您可以使用的公共 ntp 服务器列表:http://www.pool.ntp.org/en/

以下是更多信息:

时钟同步

建立 SNTP 连接的示例代码

我希望这些信息对您做出决定有所帮助。