LocationManager's getBestProvider devolver null
Tengo un montón de gente reportando un error que no puedo reproducir. Al intentar abrir un MapView
está informando de que el getBestProvider
está devolviendo nulo y sé que significa que no se encuentra ningún proveedor que cumple mis criterios que es ACCURACY_COARSE
por lo que si no hay GPS, entonces debe caer en la network or passive
pero que Obviamente no en esos dispositivos de usuario. ¿Qué significa eso que incluso significa que el GPS está apagado y no hay conexión de red?
Intenté desactivar el GPS y poner el teléfono en el modo avión para tratar de reproducir el problema, pero aún así fue capaz de abrir el mapa sin una fuerza de cierre por lo que no sé cómo manejar este problema.
- SecurityException al llamar a getLastKnownLocation
- GeoFence no activado con ubicación falsa
- Servicios de ubicación de Google contra servicios de ubicación de Android
- Servicios de ubicación de Android que drenan la batería - Fused Location API
- MyLocationOverlay dispatchTap () no se propaga
locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); geocoder = new Geocoder(this); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); List<String> lProviders = locationManager.getProviders(false); for(int i=0; i<lProviders.size(); i++){ Log.d("LocationActivity", lProviders.get(i)); } String provider = locationManager.getBestProvider(criteria, true); // null long minTime = 60000; float minDistance = 5; locationManager.requestLocationUpdates(provider, minTime, minDistance, this);
error
java.lang.RuntimeException: Unable to start activity ComponentInfo{ecm2.android/ecm2.android.LocationActivity}: java.lang.IllegalArgumentException: provider==null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.access$2300(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalArgumentException: provider==null at android.location.LocationManager.requestLocationUpdates(LocationManager.java:625) at ecm2.android.LocationActivity.onCreate(LocationActivity.java:142) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
- Establecer un tiempo de espera para android requestSingleUpdate
- Obtener distancia entre la ubicación actual y Selected Place en android
- OnLocationChanged sólo se llama una vez, no se actualiza
- ¿Es Fused Location Provider buena opción?
- ¿Es posible obtener una notificación cuando se habilita / deshabilita cualquier proveedor de ubicación y determina qué acción se ha producido?
- Precisión de ubicación de Google Analytics para Android
- Cómo obtener la ubicación de las coordenadas
- Servicio de fondo con oyente de localización en android
En tu llamada a getBestProvider()
has solicitado solo proveedores habilitados (ese es el segundo parámetro en la llamada al método que has establecido en true
). Si el usuario ha deshabilitado todos los proveedores, obtendrá null
.
En cualquier caso, debe ser capaz de hacer frente a la situación en la que no hay proveedores disponibles, por lo que tendrá que comprobar si hay null
y decirle al usuario que no ha habilitado ninguna ubicación.
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
MapsActivity.java
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (permissions.length == 1 && permissions[0] == android.Manifest.permission.ACCESS_FINE_LOCATION && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } mMap.setMyLocationEnabled(true); } else { // Permission was denied. Display an error message. } }
MapsActivity.java/onCreate ()
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { mMap.setMyLocationEnabled(true); } else { ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1); }
Este trabajo para mí;
- Java.lang.ClassNotFoundException: android.os.AsyncTask causado por AdMob / Servicios de Google Play?
- SyncAdapter no se llama dependiendo del orden de las llamadas de configuración de cuenta