Back to project page FlickrBrowser.
The source code is released under:
MIT License
If you think the Android project FlickrBrowser listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.flickrbrowser.location; // w w w . ja va 2 s.c o m import android.location.Location; import android.location.LocationListener; import android.os.Bundle; import com.flickrbrowser.parcelable.SimpleLocation; /** Simple class to handle location updates. Copied from the android developer guide @see <a href="http://developer.android.com/guide/topics/location/strategies.html">Location Strategies</a> */ public class SimpleLocationListener implements LocationListener { private static final int TWO_MINUTES = 1000 * 60 * 2; private Location currentBestLocation; private boolean useLocation = true; public boolean isUseLocation() { return useLocation; } public void setUseLocation(boolean useLocation) { this.useLocation = useLocation; } public SimpleLocation getSimpleLocation() { if(currentBestLocation == null || !useLocation) { return null; } return new SimpleLocation(currentBestLocation); } public Location getLocation() { if(!useLocation) { return null; } return currentBestLocation; } public void setLocation(Location location) { currentBestLocation = location; } @Override public void onLocationChanged(Location location) { if(isBetterLocation(location)) { currentBestLocation = location; } } @Override public void onStatusChanged(String s, int i, Bundle bundle) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onProviderEnabled(String s) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onProviderDisabled(String s) { //To change body of implemented methods use File | Settings | File Templates. } /** Determines whether one Location reading is better than the current Location fix * @param location The new Location that you want to evaluate */ protected boolean isBetterLocation(Location location) { 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; } /** Checks whether two providers are the same */ private boolean isSameProvider(String provider1, String provider2) { if (provider1 == null) { return provider2 == null; } return provider1.equals(provider2); } }