这个问题可能有些冗长,但可以听取许多建议。
问题陈述:
我们有几个APILevel8(Android2.2) MyTouch设备,我们将使用这些设备在游乐园记录加速度数据,即在过山车上。我们也有一个可视化的功能,让我们可以绘制和查看加速度计点作为时间的函数,他们被记录下来。这就是我们进退两难的地方!Android设备上的系统时间并不完全相同,也不能以毫秒的精度设置在同一时间(只有手工操作,精度很小,这太糟糕了)。
解决方案尝试:
因此,我首先根据应用程序开始时发现的GPS时间来记录数据。长进程短:获取GPS时间,获取系统时间,获取差异,在记录数据点时,再次获取系统时间并将差值添加到时间上,标记为开始记录时间,并从那里开始每个记录数据点增加200毫秒。然而,有两个问题(获取GPS时间):
getLastKnownLocation()并不太准确。实际上,这看起来很不准确。它给我的时间是比现在格林尼治标准时间/世界协调时差9分钟。然而,巧合的是,在Android设备上,系统时间也差不多是9分钟.GPS时间和系统时间之间的差异通常在1000到5000毫秒之间(1到5秒)。我想我的代码有可能是错的。我把它贴在下面让你看。requestSingleUpdate()将是很好的使用,因为它将得到一个更近期的位置,也许是一个非常准确的时间。有问题吗?需要API级别9..。我们没有的设备。的想法:
不过,我有一个想法--如果我从一个网站上提取了一个全球时间,并利用从那里提取的时间作为记录的时间,那该怎么办?问题是-我不知道该怎么做,这只是我的一厢情愿.
另一个想法--是否有某种我根本不知道的全局函数getTime()-type?
推理为什么我想让安卓从一个类似的时钟中抽出时间:
想象一下,两个人坐在过山车上,一个坐在前排,一个坐在后座。当记录数据时,前面的人显然会在后面的人之前稍微经历加速(我们希望在我们的可视化图上看到这一点)。这就是为什么对于毫秒精度来说,这些点是根据一个单一的全球时间记录的关键。
代码:
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()。我非常喜欢他的代码/答案,但如果这是最好的解决方案,这是什么“服务器”和/或如何设置一个呢?
发布于 2012-06-25 17:02:55
我认为响应者在那篇文章中所指的“服务器”是要设置一个专用的时间服务器。基本上,您将设置一些硬件,所有使用您的应用程序的人都会连接到这些硬件以获得时间。这可能比你愿意付出的努力还要多。
你需要以下几点,
我也不确定这是否是您最好的解决方案,因为它将取决于网络连接到您的专用服务器。您可以尝试以下几种替代解决方案:
我不知道你的应用程序是公开的还是专门用于研究的。如果是后者,它将与一群你认识并可以协调的人在一起,我实际上建议你下载ClockSync,同步你的手机到同一时间服务器,然后执行你的应用程序。
如果您的应用程序将分发给您不愿与之接触的人,那么您最好的选择是让您的应用程序连接到一个ntp服务器,并以这种方式获取时间。以下是您可以使用的公共ntp服务器列表:http://www.pool.ntp.org/en/
以下是更多信息:
用于建立SNTP连接的样本代码
我希望这些信息对你作出决定有帮助。
https://stackoverflow.com/questions/11190843
复制相似问题