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:
- Actualizaciones de ubicación que no funcionan en interiores como lo reclaman las API del proveedor de ubicaciones de Fusion
- IllegalArgumentException: el proveedor no exisit: null en Maps V1
- Alternativa a FusedLocationProviderApi
- ¿Cómo obtener la ubicación con Wifi en Android?
- ¿Es posible simular ubicaciones con el nuevo proveedor de ubicación fusionado de Google?
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?
- ¿Cómo activar el receptor de difusión cuando gps está encendido / apagado?
- Android obtener la ubicación del mejor proveedor disponible
- Calibración GPS androide
- La mejor manera de obtener la ubicación del GPS del usuario en segundo plano en Android
- Proveedores de ubicación de Android - ¿Proveedor de GPS o de red?
- ¿Cómo puedo detener al usuario durante mucho tiempo para obtener una corrección de ubicación?
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