http://blog.doityourselfandroid.com/2010/12/25/understanding-locationlistener-android/ http://blog.doityourselfandroid.com/2010/12/25/understanding-locationlistener-android/
http://developer.android.com/guide/topics/location/strategies.html http://developer.android.com/guide/topics/location/strategies.html
I am confused on how to implement the block of code from that section into my own app. The block of code takes two parameters, location and currentbestlocation and compares them.
- How do you declare two location objects for the block of code to compare? (code example or pseudo code would be much appreciated!)
- Is my understanding correct that locationlistener provides multiple location objects?
- How do I implement GOOGLES code into mine? See below:
my code below:
public class MainActivity extends Activity { LocationManager lm; LocationListener ll; private Location previousLocation; public void onCreate(Context context, Intent intent) { lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); ll = new myListener(); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 1000, ll); } private class myListener implements LocationListener { public void onLocationChanged(Location loc) { if (previousLocation == null) { previousLocation = loc; } else { if (isBetterLocation(loc, previousLocation)) { //NOTIFICATION NEW LOCATION IS BETTER } else { //NOTIFICATION PREVIOUS LOCATION IS BETTER } } } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { } } //GOOGLE ANDROID DOCUMENTATION CODE FOR MAINTAINING CURRENT BEST ESTIMATE private static final int TWO_MINUTES = 1000 * 60 * 2; protected boolean isBetterLocation(Location location, Location currentBestLocation) { if (currentBestLocation == null) { // A new location is always better than no location return true; } // Check whether the new location fix is newer or older long timeDelta = location.getTime() - currentBestLocation.getTime(); boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; boolean isNewer = timeDelta > 0; // If it s been more than two minutes since the current location, use the new location // because the user has likely moved if (isSignificantlyNewer) { return true; // If the new location is more than two minutes older, it must be worse } else if (isSignificantlyOlder) { return false; } // Check whether the new location fix is more or less accurate int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); boolean isLessAccurate = accuracyDelta > 0; boolean isMoreAccurate = accuracyDelta < 0; boolean isSignificantlyLessAccurate = accuracyDelta > 200; // Check if the old and new location are from the same provider boolean isFromSameProvider = isSameProvider(location.getProvider(), currentBestLocation.getProvider()); // Determine location quality using a combination of timeliness and accuracy if (isMoreAccurate) { return true; } else if (isNewer && !isLessAccurate) { return true; } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) { return true; } return false; } private boolean isSameProvider(String provider1, String provider2) { if (provider1 == null) { return provider2 == null; } return provider1.equals(provider2); } }