这个问题可能有点冗长,但可以提出许多建议。
问题陈述:
我们有几个 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){
}
}
更新:
在这里,有人建议一种“服务器” getTime()
。我真的很喜欢他的代码/答案,但是这个“服务器”是什么和/或我如何设置一个,如果这是最好的解决方案?