Мне нужно будет использовать данные о местоположении в нескольких действиях моего приложения, и мне было интересно, нужно ли создавать новый LocationClient в каждом действии, или есть ли лучший способ создать его один раз и получить к нему доступ из каждого действия. Любые рекомендации о том, как я должен справиться с этим?
При использовании данных о местоположении лучше ли создавать новый LocationClient в каждом действии или есть способ поддерживать один и тот же во всем?
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