首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个Android设备上记录数据的同步时间

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

Stack Overflow用户
提问于 2012-06-25 14:04:36
回答 1查看 4.3K关注 0票数 8

这个问题可能有些冗长,但可以听取许多建议。

问题陈述:

我们有几个APILevel8(Android2.2) MyTouch设备,我们将使用这些设备在游乐园记录加速度数据,即在过山车上。我们也有一个可视化的功能,让我们可以绘制和查看加速度计点作为时间的函数,他们被记录下来。这就是我们进退两难的地方!Android设备上的系统时间并不完全相同,也不能以毫秒的精度设置在同一时间(只有手工操作,精度很小,这太糟糕了)。

解决方案尝试:

因此,我首先根据应用程序开始时发现的GPS时间来记录数据。长进程短:获取GPS时间,获取系统时间,获取差异,在记录数据点时,再次获取系统时间并将差值添加到时间上,标记为开始记录时间,并从那里开始每个记录数据点增加200毫秒。然而,有两个问题(获取GPS时间):

  • 使用getLastKnownLocation()并不太准确。实际上,这看起来很不准确。它给我的时间是比现在格林尼治标准时间/世界协调时差9分钟。然而,巧合的是,在Android设备上,系统时间也差不多是9分钟.GPS时间和系统时间之间的差异通常在1000到5000毫秒之间(1到5秒)。我想我的代码有可能是错的。我把它贴在下面让你看。
  • requestSingleUpdate()将是很好的使用,因为它将得到一个更近期的位置,也许是一个非常准确的时间。有问题吗?需要API级别9..。我们没有的设备。

的想法:

不过,我有一个想法--如果我从一个网站上提取了一个全球时间,并利用从那里提取的时间作为记录的时间,那该怎么办?问题是-我不知道该怎么做,这只是我的一厢情愿.

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

推理为什么我想让安卓从一个类似的时钟中抽出时间:

想象一下,两个人坐在过山车上,一个坐在前排,一个坐在后座。当记录数据时,前面的人显然会在后面的人之前稍微经历加速(我们希望在我们的可视化图上看到这一点)。这就是为什么对于毫秒精度来说,这些点是根据一个单一的全球时间记录的关键。

代码:

代码语言:javascript
复制
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){

    }

}

更新:

这里,有人建议使用一种“服务器”getTime()。我非常喜欢他的代码/答案,但如果这是最好的解决方案,这是什么“服务器”和/或如何设置一个呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-25 17:02:55

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

你需要以下几点,

  1. 一些备用硬件(可以像运行tomcat的计算机一样简单,也可以像专用服务器机架一样复杂,这取决于您认为会有多少人使用您的应用程序)。或对域服务器/web主机的订阅。
  2. 一些web服务,只要应用程序请求,就会返回时间。
  3. 您需要公开您的服务器/webservice,这是另一个令人头痛的问题。

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

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

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

以下是更多信息:

ClockSync

用于建立SNTP连接的样本代码

我希望这些信息对你作出决定有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11190843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档