【问题标题】:Sync Time for Recording Data on Multiple Android Devices在多个 Android 设备上记录数据的同步时间
【发布时间】:2012-06-25 14:04:36
【问题描述】:

这个问题可能有点啰嗦,但有很多建议。


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


解决方案尝试:
因此,我首先根据应用程序启动时的 GPS 时间记录数据。长流程短:获取GPS时间,获取系统时间,获取差异,在记录数据点后,再次获取系统时间并将差异添加回时间,将其标记为记录开始时间,每次增加200毫秒从那里记录的数据点。但是,有两个问题(获取 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){

    }

}

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

【问题讨论】:

    标签: android time gps


    【解决方案1】:

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

    你需要以下,

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

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

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

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

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

    如果您的应用程序要分发给您不会接触的人,那么最好的办法是让您的应用程序连接到一个 ntp 服务器并以这种方式抓住时间。以下是您可以使用的公共 ntp 服务器列表:http://www.pool.ntp.org/en/

    这里有更多信息:

    ClockSync

    Sample code 用于建立 SNTP 连接

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

    【讨论】:

    • 我们实际上与我们拥有的服务器进行通信 - 我将看看其中一个人是否会编写一个从服务器获取时间的 API 函数,然后我们可以通过 Android 设备与之通信.也感谢您的代码 - 非常有帮助。如果这行得通/行不通,我会回复你。
    • 感谢您的帮助 - 我们决定使用 DatagramSockets 在类似的 WiFi 网络上托管/接收时间,以便所有手机同步到主机手机的时间。如果我有任何 DatagramSocket 问题,我一定会问。
    • @Mxyk 您将移动设备上的时间同步到的准确度如何?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多