我正在寻找一种在我的应用程序中显示GPS时间的方法。
最简单的方法是什么?
(由于GPS时间和内部系统时间之间存在轻微时间差,因此必须使用GPS时间)
谢谢
获取GPS时间可能会令人困惑!为了扩展接受答案中的讨论,在onLocationChanged()回调中使用getTime()根据位置(不一定是GPS)信息的获取方式,将得到不同的答案(基于Nexus 5测试):
(a) 如果使用Google FusedLocationProviderApi(Google位置服务API),则getProvider()将返回“fused”,而getTime()将返回设备的时间(System.currentTimeMillis())
(b) 如果使用Android LocationManager(Android位置API),则取决于手机的“位置”设置和requestLocationUpdates设置(LocationManager.NETWORK_PROVIDER和/或LocationManager.GPS_PROVIDER),getProvider()将返回:
本质上:“fused”使用GPS和Wi-Fi /网络,“network”使用Wi-Fi /网络,“gps”使用GPS。
因此,要获取GPS时间,请使用Android LocationManager,并将requestLocationUpdates设置为LocationManager.GPS_PROVIDER。(请注意,在这种情况下,getTime()毫秒部分始终为000)
以下是一个使用Android LocationManager(Android位置API)的示例:
public void InitialiseLocationListener(android.content.Context context) {
android.location.LocationManager locationManager = (android.location.LocationManager)
context.getSystemService(android.content.Context.LOCATION_SERVICE);
android.location.LocationListener locationListener = new android.location.LocationListener() {
public void onLocationChanged(android.location.Location location) {
String time = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS").format(location.getTime());
if( location.getProvider().equals(android.location.LocationManager.GPS_PROVIDER))
android.util.Log.d("Location", "Time GPS: " + time); // This is what we want!
else
android.util.Log.d("Location", "Time Device (" + location.getProvider() + "): " + time);
}
public void onStatusChanged(String provider, int status, android.os.Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
};
if (android.support.v4.content.ContextCompat.checkSelfPermission(context,
android.Manifest.permission.ACCESS_FINE_LOCATION) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
android.util.Log.d("Location", "Incorrect 'uses-permission', requires 'ACCESS_FINE_LOCATION'");
return;
}
locationManager.requestLocationUpdates(android.location.LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
locationManager.requestLocationUpdates(android.location.LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
// Note: To Stop listening use: locationManager.removeUpdates(locationListener)
}
onLocationChanged
。该方法的参数是Location
类的实例。该参数的一个方法是getTime
,它将为您提供您所寻找的内容。如果我理解正确您要查找的内容就在这里。了解更多点击这里。getTime()
函数返回的时间是 GPS 推导出的 UTC 时间,而非设备时间。显然,这只适用于您使用 GPS 位置提供程序的情况 - 如果您使用 Wi-Fi,则可能是设备时间。请注意,真正的“GPS时间”比UTC提前16秒。getTime()
返回从GPS推导出的UTC时间,而不是GPS时间本身。 - Timmmm