Android Open Source - SensorsWebLogger Best Last Location






From Project

Back to project page SensorsWebLogger.

License

The source code is released under:

GNU General Public License

If you think the Android project SensorsWebLogger listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.kost.android.sensorsweblogger;
/* w w  w .ja  va2  s  .  c o m*/
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;

public class BestLastLocation {
    private static final int TWO_MINUTES = 1000 * 60 * 2;

    /* Return best known location */
    public Location getBestLocation (Context mycontext) {
        // Acquire a reference to the system Location Manager
        LocationManager locationManager = (LocationManager) mycontext.getSystemService(Context.LOCATION_SERVICE);

        String NetProvider = LocationManager.NETWORK_PROVIDER;
        String GPSProvider = LocationManager.GPS_PROVIDER;

        Location NetLocation = locationManager.getLastKnownLocation(NetProvider);
        Location GPSLocation = locationManager.getLastKnownLocation(GPSProvider);

        if (isBetterLocation(NetLocation,GPSLocation)) {
            return NetLocation;
        }
        return GPSLocation;
    }

    /** Determines whether one Location reading is better than the current Location fix
     * @param location  The new Location that you want to evaluate
     * @param currentBestLocation  The current Location fix, to which you want to compare the new one
     */
    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;
    }

    /** Checks whether two providers are the same */
    private boolean isSameProvider(String provider1, String provider2) {
        if (provider1 == null) {
            return provider2 == null;
        }
        return provider1.equals(provider2);
    }
}




Java Source Code List

org.kost.android.sensorsweblogger.ApplicationTest.java
org.kost.android.sensorsweblogger.BestLastLocation.java
org.kost.android.sensorsweblogger.HandleSensors.java
org.kost.android.sensorsweblogger.MainActivity.java
org.kost.android.sensorsweblogger.MainService.java
org.kost.android.sensorsweblogger.MyReceiver.java
org.kost.android.sensorsweblogger.SendSensorData.java
org.kost.android.sensorsweblogger.SensorAmbientTemperature.java
org.kost.android.sensorsweblogger.SensorLight.java
org.kost.android.sensorsweblogger.SensorPressure.java
org.kost.android.sensorsweblogger.SensorRelativeHumidity.java
org.kost.android.sensorsweblogger.SettingsActivity.java
org.kost.android.sensorsweblogger.TemplateSensor.java