Search code examples
androidgpsbackground-process

How to get gps location once for 5 mins android?


hi there can anybody give me a sample code for get location for every five minutes please i have tried and i can get location once by cliking on button, but i need it to be displayed once for five minutes.

thank you

this is my code :

public void checkLocation(View v) {

        //initialize location manager
        manager =  (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        //check if GPS is enabled
        //if not, notify user with a toast
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            Toast.makeText(this, "GPS is disabled.", Toast.LENGTH_SHORT).show();
        } else {

            //get a location provider from location manager
            //empty criteria searches through all providers and returns the best one
            String providerName = manager.getBestProvider(new Criteria(), true);
            Location location = manager.getLastKnownLocation(providerName);

            TextView tv = (TextView)findViewById(R.id.locationResults);
            if (location != null) {
                tv.setText(location.getLatitude() + " latitude, " + location.getLongitude() + " longitude");
            } else {
                tv.setText("Last known location not found. Waiting for updated location...");
            }
            //sign up to be notified of location updates every 15 seconds - for production code this should be at least a minute
            manager.requestLocationUpdates(providerName, 15000, 1, this);
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        TextView tv = (TextView)findViewById(R.id.locationResults);
        if (location != null) {
            tv.setText(location.getLatitude() + " latitude, " + location.getLongitude() + " longitude");
        } else {
            tv.setText("Problem getting location");
        }
    }

    @Override
    public void onProviderDisabled(String arg0) {}

    @Override
    public void onProviderEnabled(String arg0) {}

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}

    // Find the closest Bart Station
    public String findClosestBart(Location loc) {
        double lat = loc.getLatitude();
        double lon = loc.getLongitude();

        double curStatLat = 0;
        double curStatLon = 0;
        double shortestDistSoFar = Double.POSITIVE_INFINITY;
        double curDist;
        String curStat = null;
        String closestStat = null;

        //sort through all the stations
        // write some sort of for loop using the API.

        curDist = Math.sqrt( ((lat - curStatLat) * (lat - curStatLat)) +
                        ((lon - curStatLon) * (lon - curStatLon)) );
        if (curDist < shortestDistSoFar) {
            closestStat = curStat;
        }

        return closestStat;

        }   

Solution

  • Here is the code for getting location and set the listener for gps to get current location on few minute and distance, also I have used runnable object to get the location on every few minutes.

    Location gpslocation = null;
    
    private static final int GPS_TIME_INTERVAL = 60000; // get gps location every 1 min
    private static final int GPS_DISTANCE= 1000; // set the distance value in meter
    
    /*
       for frequently getting current position then above object value set to 0 for both you will get continues location but it drown the battery
    */
    
    private void obtainLocation(){
    if(locMan==null)
        locMan = (LocationManager) getSystemService(LOCATION_SERVICE);
    
        if(locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            gpslocation = locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if(isLocationListener){
                 locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
                            GPS_TIME_INTERVAL, GPS_DISTANCE, GPSListener);
                    }
                }
            }
    }
    

    Now use this method to get the current location and the listener was called on location change with every 1 min and 1000 meter of distance.

    For getting every 5 min you can use this handler and runnable to get this location on well set period time:

    private static final int HANDLER_DELAY = 1000*60*5;
    
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
            public void run() {
                myLocation = obtainLocation();
                handler.postDelayed(this, HANDLER_DELAY);
            }
        }, START_HANDLER_DELAY);
    

    Here is GPS listener for location change event:

    private LocationListener GPSListener = new LocationListener(){
        public void onLocationChanged(Location location) {
            // update location
            locMan.removeUpdates(GPSListener); // remove this listener
        }
    
        public void onProviderDisabled(String provider) {
        }
    
        public void onProviderEnabled(String provider) {
        }
    
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    };
    

    You can set interval time for listener and handler same for getting GPS location.