Как получить местоположение GPS один раз за 5 минут Android?

привет, кто-нибудь может дать мне пример кода для получения местоположения каждые пять минут, пожалуйста, я пробовал, и я могу получить местоположение один раз, нажав кнопку, но мне нужно, чтобы оно отображалось один раз в течение пяти минут.

благодарю вас

это мой код:

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;

        }   

person Community    schedule 17.04.2013    source источник
comment
использовать функции обработчика и обновлять каждые пять минут. код, который является нажатием кнопки, вводится в эту функцию   -  person SubbaReddy PolamReddy    schedule 17.04.2013
comment
как использовать функцию обработчика, вы можете отредактировать этот код, пожалуйста   -  person Gopi.cs    schedule 17.04.2013


Ответы (4)


Вот код для получения местоположения и настройки прослушивателя для GPS для получения текущего местоположения на несколько минут и расстояния, также я использовал исполняемый объект для получения местоположения каждые несколько минут.

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);
                }
            }
        }
}

Теперь используйте этот метод, чтобы получить текущее местоположение, и прослушиватель вызывался при изменении местоположения каждые 1 минуту и ​​1000 метров расстояния.

Для получения каждые 5 минут вы можете использовать этот обработчик и выполнить его, чтобы получить это местоположение в установленный период времени:

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);

Вот прослушиватель GPS для события изменения местоположения:

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) {
    }
};

Вы можете установить интервал времени для прослушивателя и обработчика для получения местоположения GPS.

person Pratik    schedule 17.04.2013
comment
Отслеживание местоположения остановится, когда пользователь закроет приложение. Как мы можем сделать это с сервисом? - person Kwnstantinos Nikoloutsos; 21.04.2019

Привет. Используйте приведенный ниже код таймера.

Вы можете использовать приведенные ниже параметры вариант 1, чтобы получить местоположения, если мобильный телефон переместился на 100 метров.

    captureFrequencey=3*60*1000;   
LocationMngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, captureFrequencey, 100, this);

взгляните на эту ссылку http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates%28java.lang.String,%20long,%20float,%20android.location.LocationListener%29

Вариант 2

   TimerTask refresher;
        // Initialization code in onCreate or similar:
        timer = new Timer();    
        refresher = new TimerTask() {
            public void run() {
              handler.sendEmptyMessage(0);
            };
        };
        // first event immediately,  following after 1 seconds each
        timer.scheduleAtFixedRate(refresher, 0,1000); 
        //=======================================================


final Handler handler = new Handler() {


        public void handleMessage(Message msg) {
              switch (msg.what) {
              case REFRESH: 
                  //your code here 

                  break;
              default:
                  break;
              }
          }
        };

Таймер вызовет обработчик на указанное вами время (замените 1000 на требуемое время).

Надеюсь, что это поможет вам.

person itsrajesh4uguys    schedule 17.04.2013

Я использовал runnable для этого,

    final Runnable r = new Runnable() {
        public void run() {
    //Here add your code location listener call
    handler.postDelayed(this, 300000 );
        }
    };

    handler.postDelayed(r, 300000 );
person Aerrow    schedule 17.04.2013

попробуйте так:

 private Handler handler = new Handler(); 

 handler.postDelayed(runnable, 300000);

 private Runnable runnable = new Runnable() {   
    public void run() {
        if (location != null) {

            onLocationChanged(location);
        } else {
            System.out.println("Location not avilable");
        }

        handler.postDelayed(this, 300000);
    } 
};
person SubbaReddy PolamReddy    schedule 17.04.2013