Mi código está tomando coordenadas de una posición enuna vez, y luego muestra las coordenadas Lat / Long. Creo que mi código es correcto, pero el problema radica en dar permiso de GPS al teléfono. Estoy usando un Samsung Nexus S y tengo todos los controladores adecuados instalados, pero no hay red en el teléfono. Me dijeron que el GPS aún debería funcionar y debería poder recuperar las coordenadas. Tengo habilitada la opción "Usar satélites GPS" y he otorgado el permiso en el manifiesto, como se ve aquí en el archivo manifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
Incluí todos los permisos de ubicación posibles en caso de que me faltara algo, con suerte eso no es un problema.
En cuanto a mi código, tengo esto en el método onCreate (¿clase? No estoy seguro de su nombre)
double[] gps = getGPS();
TextView tv = (TextView) this.findViewById(R.id.gpsCoordinates);
tv.setText("Latitude: " + gps[0] + "nLongitude: " + gps[1]);
Y luego un método privado en la clase de GPS para obtener las coordenadas
private double[] getGPS() {
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
List<String> providers = lm.getProviders(true);
/* Loop over the array backwards, and if you get an accurate location, then break out the loop*/
Location l = null;
for (int i=providers.size()-1; i>=0; i--) {
l = lm.getLastKnownLocation(providers.get(i));
if (l != null) break;
}
double[] gps = new double[2];
if (l != null) {
gps[0] = l.getLatitude();
gps[1] = l.getLongitude();
}
return gps;
Creo que saqué este código de stackoverflow y algunos otros foros y luego lo modifiqué un poco.
Respuestas
1 para la respuesta № 1<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.LOCATION"></uses-permission>
Agregue los permisos anteriores. Quizás esto lo ayude.
0 para la respuesta № 2
Necesitas poner el siguiente permiso
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
Árbitro: http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_FINE_LOCATION