Pregunta

he señalado a mi problema de unas pocas líneas de código

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 5.0f, this);
lat = location.getLatitude();
lng = location.getLongitude();
//lat = new Double(40.431682);
//lng = new Double(-74.2021819);
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));

Mi onLocationChanged Si se preguntan

public void onLocationChanged(Location location) {
        if (location != null) {
        lat = location.getLatitude();
        lng = location.getLongitude();
        pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
        }
}

Mi aplicación se bloquea si trato de conseguir el LastKnownLocation

Pero funciona bien si me alimento que es una ubicación manualmente

No tengo idea de cuál es actualmente mal

¿Fue útil?

Solución

En primer lugar, cada vez que reciba un choque, el uso adb logcat, DDMS, o la perspectiva DDMS en Eclipse Java para obtener el Seguimiento de la pila asociada con el accidente. En este caso, sospecho que usted encontrará que usted tiene un NullPointerException al intentar utilizar el objeto location.

No se puede utilizar getLastKnownLocation() hasta bien después de llamar requestLocationUpdates(), sobre todo para el GPS. Se puede tomar decenas de segundos para que el GPS empezar a proporcionar correcciones.

Por favor, alterar su código para eliminar el uso de getLastKnownLocation() y sólo tiene que utilizar la lógica necesidad de la ubicación ya está en su método onLocationChanged(). Como mínimo, la mirada de un objeto null location y no tratar de usarlo.

Otros consejos

Mi solución era básicamente sólo lugar utilización gruesa.

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String bestProvider = lm.getBestProvider(criteria, true);
Location loc = lm.getLastKnownLocation(bestProvider);
lat = loc.getLatitude();
lng = loc.getLongitude();

Esto puede suceder porque la ubicación precisa (GPS) no está habilitado en su dispositivo. O el permiso ACCESS_FINE_LOCATION no se especifica en el manifiesto.

apuesto a que si se depura verá excepción nula. Por lo tanto, se debe a que usted está tratando de latitud y longitud del extracto de ubicación que no se fije todavía. Surround esta extracción con si (loc! = Null) {} y se puso a progressDialog usuario espera allí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top