Как очистить значения широты и долготы в Android, когда приложение закрыто - PullRequest
0 голосов
/ 02 апреля 2012

Извините за мой плохой английский.

Точно так же, как я спросил. У меня есть этот класс для обработки изменения местоположения.

package com.mousepad.runningkids.util;

import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class MyLocationManager {

    private Context context;
    private double myLat = 0.0;
    private double myLon = 0.0;
    private LocationManager locationManager = null;
    private Location location = null;
    private Criteria criteria;
    private String locationName = null;
    private MyLocationListener mll;

    public MyLocationManager(Context ctx) {
        this.context = ctx;
    }

    private String setCriteria() {
        this.criteria = new Criteria();
        this.criteria.setAccuracy(Criteria.ACCURACY_FINE);
        this.criteria.setAltitudeRequired(false);
        this.criteria.setBearingRequired(false);
        this.criteria.setCostAllowed(true);
        this.criteria.setPowerRequirement(Criteria.POWER_LOW);
        return locationManager.getBestProvider(criteria, true);
    }

    public double getMyLatitude() {
        return this.myLat;
    }

    public double getMyLongitude() {
        return this.myLon;
    }

    public String getLocation() {
        return this.locationName;
    }

    public void onLocationUpdate() {
        locationManager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        String provider = setCriteria();

        location = locationManager.getLastKnownLocation(provider);
        updateWithNewLocation(location);
        mll = new MyLocationListener();
        locationManager.requestLocationUpdates(provider, 1000, 0, mll);

    }

    public void stopLocationListenerService() {
        locationManager.removeUpdates(this.mll);
    }

    private void updateWithNewLocation(Location location) {
        if (location != null) {
            this.myLat = location.getLatitude();
            this.myLon = location.getLongitude();
            // Toast.makeText(this.context,
            // "Lokasi Anda:\n" + this.myLat + "\n" + this.myLon,
            // Toast.LENGTH_LONG).show();
            getLocationName(this.myLat, this.myLon);
        } else {
            Toast.makeText(this.context, "Lokasi Anda Tidak Diketahui",
                    Toast.LENGTH_SHORT).show();
        }
    }

    private void getLocationName(double lat, double lon) {
        Geocoder geocoder = new Geocoder(context, Locale.getDefault());
        try {
            List<Address> adresses = geocoder.getFromLocation(lat, lon, 1);
            StringBuilder sb = new StringBuilder();
            if (adresses.size() > 0) {
                Address address = adresses.get(0);
                for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
                    sb.append(address.getAddressLine(i)).append("\n");
                sb.append(address.getCountryName()).append("\n");
            }
            this.locationName = sb.toString();
            // Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private class MyLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location newLocation) {
            // TODO Auto-generated method stub
            myLat = newLocation.getLatitude();
            myLon = newLocation.getLongitude();
            getLocationName(myLat, myLon);
        }

        @Override
        public void onProviderDisabled(String arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onProviderEnabled(String arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            // TODO Auto-generated method stub
        }

    }

}

Когда это приложение закрыто, последние Широта и Долгота по-прежнему сохраняются, и при повторном запуске его последнее местоположение, сохраненное в телефоне, является последним местоположением до его прослушивания и обновления его местоположения.

У меня вопрос, как очистить данные о местоположении (пространственные), такие как широта и долгота, не выключая телефон. Сохраняется ли он в кеше приложения? Потому что я уже создал код для очистки кэша, когда приложения закрыты.

Спасибо тебе.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

вы можете запустить диспетчер местоположения в onResume () и удалить слушателя местоположения в onPause (), поэтому в следующий раз, когда вы начнете деятельность, вы получите текущую позицию, потому что onResume () вызовет onLocationChanged () и вы получите новую запись или wat, который вы можете сделать, это onResume () использовать предопределенный геопункт. Или другой способ, как это.

@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        if (checkGPSservice() /*this is just of my use you dont need if block just write following line*/) {
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 0, 0, this);
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        locationManager.removeUpdates(this);
    }
0 голосов
/ 02 апреля 2012

вам нужно добавить два метода, как показано ниже, в MyLocationManager, который очистит ваши значения lat и long при вызове метода onPause класса Activity.

  public  setMyLatitude(double paramLat) {
       this.myLat=paramLat;
  }

public  setMyLongitude(double paramLong) {
     this.myLon=paramLong;
}

Теперь вызывайте этот метод Set, когда ваше приложение закрывается, что означает

 @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
 //Call Set Method from Here ,set them to initial Value     
      super.onDestroy();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...