При использовании данных о местоположении лучше ли создавать новый LocationClient в каждом действии или есть способ поддерживать один и тот же во всем?

Мне нужно будет использовать данные о местоположении в нескольких действиях моего приложения, и мне было интересно, нужно ли создавать новый LocationClient в каждом действии, или есть ли лучший способ создать его один раз и получить к нему доступ из каждого действия. Любые рекомендации о том, как я должен справиться с этим?


person user1755043    schedule 08.01.2014    source источник
comment
Вам требовались единые данные для всей вашей деятельности?   -  person AndroidHacker    schedule 08.01.2014


Ответы (1)


Я думаю, что было бы намного лучше создать один класс для прослушивателя местоположения и использовать его везде в вашем проекте. Я только что создал это в одном из своих пакетов и в каждом классе, где я хочу получить значения местоположения. Я просто вызываю это.

LocationSender loc = new LocationSender(YourClass.this);

Поскольку я объявил lat, lng статическим, я могу получить его значения в любом месте.

double latitude = LocationSender.lat;
double longitude = LocationSender.lng;

LocationSender.java

public class LocationSender {
Context context;
LocationManager locationManager;
Location location;
static double lat,lng;
public LocationSender(Context ctx) {
    context=ctx;
    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}

// Acquire a reference to the system Location Manager
public void getNewLocation(Location location) throws JSONException
{
    String latLongString = "";
    if (location != null) {
        this.location=location;
      lat= location.getLatitude();
       lng = location.getLongitude();
        latLongString = "Lat:" + String.valueOf(LocationActivity.lat) + "\nLong:" +  String.valueOf(LocationActivity.lng);
        Log.d("Location Found", latLongString);
       } else
    {
        location=null;
        latLongString = "No location found";
    }
    Toast.makeText(context, latLongString, Toast.LENGTH_LONG).show();
}






LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
        try {
            getNewLocation(location);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }



    public void onProviderEnabled(String provider) {

        Toast.makeText(context, "Provider: "+provider+" : Enabled", Toast.LENGTH_LONG).show();
    }

    public void onProviderDisabled(String provider) {

        Toast.makeText(context, "Provider: "+provider+" : disabled", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Toast.makeText(context, "Provider: "+provider+" : status: "+status, Toast.LENGTH_LONG).show();

    }
  };    

 }

Также, пожалуйста, не забудьте вставить разрешения местоположения в AndroidManifest.xml :)

person Talha Q    schedule 08.01.2014