Скотт, есть много факторов, которые влияют на то, сколько времени может занять первое исправление - или даже на то, может ли оно быть достигнуто, наиболее распространенными из которых являются физические препятствия между устройством и спутниками (например, здания, стены каньона и т. Д.).
Вы не можете контролировать, сколько времени понадобится движку GPS для доставки исправления, но вы можете сказать, как оно работает, включая время первого исправления:
locationManager.addGpsStatusListener(gpsListener);
// this reports on the status of the GPS engine, but does not enable additional controls
private static final GpsStatus.Listener gpsListener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
GpsStatus gpsStatus = locationManager.getGpsStatus(null);
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
Log.i(TAG, "onGpsStatusChanged(): GPS started");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.i(TAG, "onGpsStatusChanged(): time to first fix in ms = " + gpsStatus.getTimeToFirstFix());
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// int maxSatellites = gpsStatus.getMaxSatellites(); // appears fixed at 255
// if (H.DEBUG) Log.d(TAG, "onGpsStatusChanged(): max sats = " + maxSatellites);
if (H.VERBOSE) Log.d(TAG, "onGpsStatusChanged(): ##,used,s/n,az,el");
Iterable<GpsSatellite>satellites = gpsStatus.getSatellites();
Iterator<GpsSatellite>satI = satellites.iterator();
while (satI.hasNext()) {
GpsSatellite satellite = satI.next();
if (H.VERBOSE) Log.d(TAG, "onGpsStatusChanged(): " + satellite.getPrn() + "," + satellite.usedInFix() + "," + satellite.getSnr() + "," + satellite.getAzimuth() + "," + satellite.getElevation());
// http://en.wikipedia.org/wiki/Global_Positioning_System: the almanac consists of coarse orbit and status information for each satellite
// http://en.wikipedia.org/wiki/Ephemeris: the positions of astronomical objects in the sky at a given time
// + "," + satellite.hasAlmanac() + "," + satellite.hasEphemeris());
}
break;
case GpsStatus.GPS_EVENT_STOPPED:
Log.i(TAG, "onGpsStatusChanged(): GPS stopped");
break;
}
}
};
События будут генерироваться при попытке двигателя прослушивать доступные спутники. В недавнем тесте этого с легкими препятствиями я обнаружил, что для первоначального исправления потребовалось 22,4 секунды, в течение которых 24 события SATELLITE_STATUS сообщали о постепенном доступе 8 спутников, прежде чем были получены достаточно чистые сигналы для достижения исправления. Вот последнее событие:
06-08 23: 23: 25.147, D, GPS, 22427, «onGpsStatusChanged (): ##, используется, з / п, аз, эл»
06-08 23: 23: 25.147, D, GPS, 22427, "onGpsStatusChanged (): 2, true, 26.0,57.0,73.0"
06-08 23: 23: 25.147, D, GPS, 22427, "onGpsStatusChanged (): 4, правда, 30.0,46.0,27.0"
06-08 23: 23: 25.147, D, GPS, 22427, "onGpsStatusChanged (): 5, true, 19.0,144.0,25.0"
06-08 23: 23: 25.155, D, GPS, 22427, "onGpsStatusChanged (): 9, правда, 22.0,202.0,22.0"
06-08 23: 23: 25.155, D, GPS, 22427, "onGpsStatusChanged (): 10, true, 17.0,109.0,32.0"
06-08 23: 23: 25.155, D, GPS, 22427, "onGpsStatusChanged (): 12, правда, 32.0 320.0,80.0"
06-08 23: 23: 25.155, D, GPS, 22427, "onGpsStatusChanged (): 29, истина, 21.0,278.0,21.0"
06-08 23: 23: 25.155, D, GPS, 22427, "onGpsStatusChanged (): 30, true, 31.0,312.0,43.0"
06-08 23: 23: 25.163, D, GpsLocationProvider, 1039, TTFF: 22457
06-08 23: 23: 25.194, I, GPS, 22427, onGpsStatusChanged (): время первого исправления в мс = 22457
Обратите внимание, что в назначенное время вы получите текущее местоположение, а не то, где вы когда-то могли быть. Я думаю, что вместе с тем, что у вас уже есть, вы можете добраться туда сейчас. Или посмотрите, как это делают профессионалы здесь .