GpsStatus.GPS_EVENT_FIRST_FIX is often time consuming
I have an Android device installed inside a car. I need to get gps location updates every second. my problem is that I am getting all the data I need (number of satellites, coordinates, time, etc.)
but for some reason "GpsStatus.GPS_EVENT_FIRST_FIX" is not called or, if called, it takes a long time (eg 30 minutes ..)
why? here is my code:
public class ExtProtocolService extends Service implements GpsStatus.Listener {
private GpsStatus gpsStatus;
private GpsData gpsData;
private LocationManager locationManager;
private LocationListener locationListener;
@Override
public void onCreate() {
locationManager = (LocationManager)
getSystemService(this.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = locationManager.getBestProvider(criteria, true);
if(provider.equals("gps"))
{
locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
// not used
}
@Override
// not used
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
// update location parameters when location is changed
@Override
public void onLocationChanged(Location location) {
gpsData.setLatitude(location.getLatitude());
L.m("LATLONG", "latitude " + location.getLatitude());
gpsData.setLongitude(location.getLongitude());
L.m("LATLONG", "longitude " + location.getLongitude());
gpsData.setSpeed(location.getSpeed());
gpsData.setHeading(location.getBearing());
gpsData.setAltitude(location.getAltitude());
gpsData.setHdop(location.getAccuracy());
}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000, 0, locationListener); // update location every 1000 ms
locationManager.addGpsStatusListener(this);
}
}
@Override
public void onGpsStatusChanged(int event) {
switch (event) {
case GpsStatus.GPS_EVENT_FIRST_FIX:
gpsData.setLocked(true); // gps is locked
break;
case GpsStatus.GPS_EVENT_STOPPED:
gpsData.setLocked(false); // gps unreachable
break;
}
gpsStatus = locationManager.getGpsStatus(null);
// calc number of satelites fixed
Iterable<GpsSatellite> sats = gpsStatus.getSatellites();
int satellites = 0;
int satellitesInFix = 0;
int timetofix = gpsStatus.getTimeToFirstFix();
for (GpsSatellite sat : sats) {
if (sat.usedInFix()) {
satellitesInFix++;
}
satellites++;
}
gpsData.setNumSatellites(satellitesInFix);
L.m("GPS", gpsData.toString());
}
}
edit: also i cant use google location API.
+3
source to share
No one has answered this question yet
Check out similar questions: