J'utilise l'API Google Maps V1. J'ai cette erreur:
Java.lang.IllegalArgumentException: provider doesn't exisit: null
Voici mon code:
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = locationManager.getBestProvider(criteria, true);
if (provider != null)
{
startTime = System.currentTimeMillis();
geoLocTimeOutTask = new GeoLocTimeOutTask();
geoLocTimeOutTask.execute();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
else
{
geoLocCallbackObj.geoLocationCallback(tagCallback);
}
Je comprends l'erreur, mais ma question est: pourquoi l'appareil m'a-t-il mis cette erreur? Et comment puis-je éviter cela s'il vous plaît?
Vous demandez des mises à jour au fournisseur de réseau lorsque ce fournisseur n'existe pas sur l'appareil. Vous pouvez remplacer ces deux lignes:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
avec
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
Vous avez déjà fait l'effort de trouver le meilleur fournisseur que l'appareil propose pour vos critères afin que ce soit celui à utiliser.
Alternativement, vérifiez que le fournisseur existe avant de vous inscrire pour les mises à jour de celui-ci:
if (locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER))
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER))
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
Vous utilisez également zéro pour le temps et la distance minimale. C'est parfait pour tester sur un appareil virtuel, mais n'oubliez pas de les changer lorsque vous utilisez un appareil réel, sinon la décharge de la batterie sera élevée.
il a été suggéré de résoudre ce problème en utilisant la nouvelle API de localisation au lieu de l'ancienne http://developer.Android.com/google/play-services/location.html
mais vraiment tout ce que vous avez à faire est de vérifier
if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
si le fournisseur n'est pas activé, il ne passera pas et ne plantera pas
Lorsque le fournisseur n'est pas pris en charge, vous obtenez une erreur, le moyen le plus simple de résoudre ce problème consiste à utiliser un critère.
locationManager.requestLocationUpdates(locationManager.(new Criteria(),true), 0, 0, locationListener);
Dans le code
critères - les critères qui doivent être mis en correspondance
Le deuxième argument qui est un booléen:
enabledOnly - si true hen, seul un fournisseur actuellement activé est renvoyé