I have the following class to get the user location.
public class GetUserLocation extends Activity {
Timer timer1;
LocationManager locationManager = null;
LocationResult locationResult;
boolean gpsEnabled = false;
boolean networkEnabled = false;
public static Location userLocation = null;
public String checkProviders(Context context) {
if (locationManager == null) {
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
try {
gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
ex.printStackTrace();
gpsEnabled = false;
}
try {
networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
ex.printStackTrace();
networkEnabled = false;
}
if(!gpsEnabled && !networkEnabled)
return "No Location Service Found.\nPlease turn on your location service by\nenabling GPS or Data Service or WI-FI";
if(gpsEnabled && !networkEnabled)
return "No Internet Service Found.\nPlease turn on your inernet service by\nenabling Data Service or WI-FI";
return null;
}
public boolean getLocation(Context context, LocationResult result) {
locationResult = result;
if (locationManager == null) {
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
// exceptions will be thrown if provider is not permitted.
try {
gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
ex.printStackTrace();
}
// don't start listeners if no provider is enabled
if (!gpsEnabled && !networkEnabled)
return false;
if (gpsEnabled) {
locationManager.removeUpdates(locationListenerGps);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,locationListenerGps);
}
if (networkEnabled) {
locationManager.removeUpdates(locationListenerNetwork);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,locationListenerNetwork);
}
timer1 = new Timer();
//timer1.schedule(new GetLastLocation(), 30000);
return true;
}
LocationListener locationListenerGps = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
timer1.cancel();
locationResult.gotLocation(location);
locationManager.removeUpdates(this);
locationManager.removeUpdates(locationListenerNetwork);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
LocationListener locationListenerNetwork = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
timer1.cancel();
locationResult.gotLocation(location);
locationManager.removeUpdates(this);
locationManager.removeUpdates(locationListenerGps);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
// class GetLastLocation extends TimerTask {
// @Override
// public void run() {
//
// locationManager.removeUpdates(locationListenerGps);
// locationManager.removeUpdates(locationListenerNetwork);
//
// Location networkLocation = null, gpsLocation = null;
// if (gpsEnabled) {
// //t = Calendar.getInstance().getTimeInMillis();
// gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// }
//
// if (networkEnabled) {
// networkLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// }
//
// // if there are both values use the latest one
// if (gpsLocation != null && networkLocation != null) {
//
// if (gpsLocation.getTime() > networkLocation.getTime())
// locationResult.gotLocation(gpsLocation);
// else
// locationResult.gotLocation(networkLocation);
//
// return;
// }
//
// if (gpsLocation != null) {
// locationResult.gotLocation(gpsLocation);
// return;
// }
//
// if (networkLocation != null) {
// locationResult.gotLocation(networkLocation);
// return;
// }
//
// locationResult.gotLocation(null);
// }
// }
public static abstract class LocationResult {
public abstract void gotLocation(Location location);
}
public void removeUpdates() {
if(timer1!=null) {
timer1.cancel();
}
locationManager.removeUpdates(locationListenerGps);
locationManager.removeUpdates(locationListenerNetwork);
userLocation = null;
locationResult.gotLocation(null);
}
public Timer getTimer() {
return this.timer1;
}
}
This code is working good for other devices, but not in galaxy s3. But in the test S3 device the google map is getting the user location fix.
Can anyone say why is this happening? Any Hints will be appreciated.