I'm using Google Maps API V1. I have this error :
java.lang.IllegalArgumentException: provider doesn't exisit: null
This is my 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);
}
I understand the error, bu my question is, whay the device put me this error ? And how can I avoid this please ?
You are requesting updates from the network provider when that provider does not exist on the device. You can replace these two lines:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
with
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
You've already gone to the effort of finding the best provider the device offers for your criteria so that is the one to use.
Alternatively, check the provider exists before registering for updates from it:
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);
You are also using zero for both time and minimum distance. This is perfect for testing on a virtual device but remember to change them when using a real device, otherwise battery drain will be high.