package com.example.asamles.app.location; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; public final class LocationListenerStandart implements LocationListener { public boolean request = false; private Location currentLocation; private LocationManager locationManager; private static volatile LocationListenerStandart instance; private LocationFound callback; String provider; private LocationListenerStandart(final Context context) { locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setCostAllowed(false); provider = locationManager.getBestProvider(criteria, true); } public static LocationListenerStandart getInstance(final Context context) { if (instance == null) { synchronized (LocationListenerStandart.class) { if (instance == null) { instance = new LocationListenerStandart(context); } } } return instance; } public boolean providersEnabled() { return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); } public void setLocationFound(LocationFound callback) { this.callback = callback; } public void startLocation() { if (provider != null) { currentLocation = locationManager.getLastKnownLocation(provider); if (currentLocation != null && System.currentTimeMillis() - currentLocation.getTime() < 180 * 60 * 1000) { this.callback.locationFound(currentLocation); } else { getGeo(LocationManager.NETWORK_PROVIDER, 0, 0); getGeo(LocationManager.GPS_PROVIDER, 0, 0); } } } private void getGeo(String provider, int minTime, int minM) { locationManager.requestLocationUpdates(provider, minTime, minM, this); request = true; } public void disableLocationUpdates() { locationManager.removeUpdates(this); request = false; } @Override public void onLocationChanged(Location location) { if (location != null) { currentLocation = location; disableLocationUpdates(); callback.locationFound(location); } } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { } }