studio example current java android class gps locationlistener

java - current - locationlistener android example



Android onLocationChanged y clase MainActivity (2)

Tengo el siguiente código:

public class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location loc) { // called when the listener is notified with a location update from the GPS Log.d("Latitude", Double.toString(loc.getLatitude())); Log.d("Longitude", Double.toString(loc.getLongitude())); } @Override public void onProviderDisabled(String provider) { // called when the GPS provider is turned off (user turning off the GPS on the phone) } @Override public void onProviderEnabled(String provider) { // called when the GPS provider is turned on (user turning on the GPS on the phone) } @Override public void onStatusChanged(String provider, int status, Bundle extras) { }

y en mi MainActivity

LocationListener locationListener = new MyLocationListener(); LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

Ahora, todo lo que quiero es recibir la posición actual del dispositivo UNA VEZ a la clase MainActivity (obtener variables de altitud y longitud para usarlas más adelante en la aplicación).

A. ¿cómo dejo de recibir la ubicación después de una sola vez? La función lm.removeUpdates (listener) solo se puede llamar en la clase MainActivity.

B. básicamente lo mismo. ¿Cómo me conecto entre la clase MyLocationListener y MainActivity one?

Lo siento, soy un novato en el desarrollo de Android y Java. ¡Y gracias!


También puede usar LocationManager.removeUpdates después de obtener las coordenadas (y posiblemente verificar si las coordenadas son suficientes para sus necesidades):

@Override public void onLocationChanged(Location loc) { // called when the listener is notified with a location update from the GPS Log.d("Latitude", Double.toString(loc.getLatitude())); Log.d("Longitude", Double.toString(loc.getLongitude())); lm.removeUpdates(this); }


Puede usar el siguiente código de muestra:

public class LocationGetter { private final Context context; private Location location = null; private final Cordinate gotLocationLock = new Cordinate(); private final LocationResult locationResult = new LocationResult() { @Override public void gotLocation(Location location) { synchronized (gotLocationLock) { LocationGetter.this.location = location; gotLocationLock.notifyAll(); Looper.myLooper().quit(); } } }; public LocationGetter(Context context) { if (context == null) throw new IllegalArgumentException("context == null"); this.context = context; } public void getLocation(int maxWaitingTime, int updateTimeout) { try { final int updateTimeoutPar = updateTimeout; synchronized (gotLocationLock) { new Thread() { public void run() { Looper.prepare(); LocationResolver locationResolver = new LocationResolver(); locationResolver.prepare(); locationResolver.getLocation(context, locationResult, updateTimeoutPar); Looper.loop(); } }.start(); gotLocationLock.wait(maxWaitingTime); } } catch (InterruptedException e1) { e1.printStackTrace(); } gteAddress (); } public double getLatitude() { return location.getLatitude(); } public double getLongitude() { return location.getLongitude(); }

En tu actividad usa:

_locationGetter=new LocationGetter(context); _locationGetter.getLocation(200000000, 10000000); _locationGetter.getLongitude(); _locationGetter.getLatitude();