All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mapbox.mapboxsdk.location.LocationServices Maven / Gradle / Ivy

package com.mapbox.mapboxsdk.location;

import android.content.Context;
import android.location.Location;
import android.support.annotation.NonNull;
import com.mapzen.android.lost.api.LocationRequest;
import com.mapzen.android.lost.api.LostApiClient;
import java.util.ArrayList;
import java.util.List;

public class LocationServices implements com.mapzen.android.lost.api.LocationListener {

    private static LocationServices instance = null;

    private LostApiClient mLocationClient;
    private LocationRequest mLocationRequest;

    private Location lastLocation = null;

    private List locationListeners = null;

    private boolean isGPSEnabled = false;

    /**
     * Private constructor for singleton LocationServices
     */
    private LocationServices(Context context) {
        super();
        // Setup location services
        mLocationClient = new LostApiClient.Builder(context).build();
        locationListeners = new ArrayList<>();
    }

    /**
     * Primary (singleton) access method for LocationServices
     * @param context Context
     * @return LocationServices
     */
    public static LocationServices getLocationServices(@NonNull final Context context) {
        if (instance == null) {
            if (context == null) {
                throw new NullPointerException("Context required for accessing LocationServices");
            }
            instance = new LocationServices(context.getApplicationContext());
        }
        return instance;
    }

    /**
     * Enabled / Disable GPS focused location tracking
     *
     * @param enableGPS true if GPS is to be enabled, false if GPS is to be disabled
     */
    public void toggleGPS(boolean enableGPS) {

        if (enableGPS) {

            if (mLocationClient.isConnected()) {
                // Disconnect first to ensure that the new requests are GPS
                com.mapzen.android.lost.api.LocationServices.FusedLocationApi.removeLocationUpdates(this);
                mLocationClient.disconnect();
            }

            // Setup Fresh
            mLocationClient.connect();
            Location lastLocation = com.mapzen.android.lost.api.LocationServices.FusedLocationApi.getLastLocation();
            if (lastLocation != null) {
                this.lastLocation = lastLocation;
            }

            // LocationRequest Tuned for GPS
            mLocationRequest = LocationRequest.create()
                    .setFastestInterval(1000)
                    .setSmallestDisplacement(3.0f)
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

            com.mapzen.android.lost.api.LocationServices.FusedLocationApi.requestLocationUpdates(mLocationRequest, this);

        } else {

            // Disconnect
            if (mLocationClient.isConnected()) {
                // Disconnect first to ensure that the new requests are GPS
                com.mapzen.android.lost.api.LocationServices.FusedLocationApi.removeLocationUpdates(this);
                mLocationClient.disconnect();
            }

        }

        isGPSEnabled = enableGPS;
    }

    public boolean isGPSEnabled() {
        return isGPSEnabled;
    }

    @Override
    public void onLocationChanged(Location location) {
        this.lastLocation = location;

        // Update Listeners
        for (LocationListener listener : this.locationListeners) {
            listener.onLocationChanged(location);
        }
    }

    /**
     * Last known location
     * @return Last known location data
     */
    public Location getLastLocation() {
        return lastLocation;
    }

    /**
     * Registers a LocationListener to receive location updates
     * @param locationListener LocationListener
     */
    public void addLocationListener(@NonNull LocationListener locationListener) {
        this.locationListeners.add(locationListener);
    }

    /**
     * Unregister a LocationListener to stop receiving location updates
     * @param locationListener LocationListener to remove
     * @return True if LocationListener was found and removed, False if it was not
     */
    public boolean removeLocationListener(@NonNull LocationListener locationListener) {
        return this.locationListeners.remove(locationListener);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy