El acceso al GPS no funciona. La aplicación utiliza la red para obtener ubicación

Mi aplicación no quiere utilizar GPS y utilizar la red para obtener la ubicación en su lugar. Comprobé que al analizar latitud y longtitude, son un poco aleatorios (como la ubicación de la red).

Si utilizo otra aplicación usando GPS (por ejemplo, Endomondo Sports tracker) veo marca característica, lo que significa que el GPS está funcionando actualmente:

Introduzca aquí la descripción de la imagen

Cuando lanzo mi solicitud, no hay marca en absoluto.

Estoy usando código siguiente (código de Lars Vogella, Fuente: http://www.vogella.com/articles/AndroidLocationAPI/article.html ):

import android.app.Activity; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class ShowLocationActivity extends Activity implements LocationListener { private TextView latituteField; private TextView longitudeField; private LocationManager locationManager; private String provider; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); latituteField = (TextView) findViewById(R.id.TextView02); longitudeField = (TextView) findViewById(R.id.TextView04); // Get the location manager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Define the criteria how to select the locatioin provider -> use // default Criteria criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLastKnownLocation(provider); // Initialize the location fields if (location != null) { System.out.println("Provider " + provider + " has been selected."); onLocationChanged(location); } else { latituteField.setText("Location not available"); longitudeField.setText("Location not available"); } } /* Request updates at startup */ @Override protected void onResume() { super.onResume(); locationManager.requestLocationUpdates(provider, 400, 1, this); } /* Remove the locationlistener updates when Activity is paused */ @Override protected void onPause() { super.onPause(); locationManager.removeUpdates(this); } @Override public void onLocationChanged(Location location) { int lat = (int) (location.getLatitude()); int lng = (int) (location.getLongitude()); latituteField.setText(String.valueOf(lat)); longitudeField.setText(String.valueOf(lng)); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { Toast.makeText(this, "Enabled new provider " + provider, Toast.LENGTH_SHORT).show(); } @Override public void onProviderDisabled(String provider) { Toast.makeText(this, "Disabled provider " + provider, Toast.LENGTH_SHORT).show(); } } 

Por supuesto, he añadido permisos en el archivo AndroidManifest.xml :

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> 

¿Algunas ideas?

Solución: puede utilizar el GPS lugar de seleccionar el mejor proveedor al decidir los criterios.

Ejemplo, reemplazar:

 locationManager.requestLocationUpdates(provider, 400, 1, this); 

Con:

 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 1, this); 

Explicación:

Dependiendo del caso de uso de su aplicación, debe elegir un proveedor de ubicación específico, por ejemplo LocationManager.GPS_PROVIDER o LocationManager.NETWORK_PROVIDER

De forma alternativa, puede proporcionar algunos criterios de entrada, como la precisión, el requisito de energía, el coste monetario, etc., y dejar que Android decida un proveedor de ubicación de coincidencia más cercano

  // Retrieve a list of location providers that have fine accuracy, no monetary cost, etc Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setCostAllowed(false); String providerName = locManager.getBestProvider(criteria, true); //and then you can make location update request with selected best provider locationManager.requestLocationUpdates(provider, 400, 1, this); 

Eche un vistazo a cómo utilizar locationmanager , cómo especificar Criteria y cómo funciona el método getBestProvider para referencia

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.