IllegalArgumentException: поставщик не существует: null на Maps V1
Я использую API Карт Google V1.
У меня есть эта ошибка:
java.lang.IllegalArgumentException: provider doesn't exisit: null
Это мой код:
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);
}
Я понимаю ошибку, буй вопрос мой, а что это заставило меня поставить эту ошибку? И как я могу избежать этого, пожалуйста?
Ответы
Ответ 1
Вы запрашиваете обновления у сетевого провайдера, если этот поставщик не существует на устройстве. Вы можете заменить эти две строки:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
с
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
Вы уже предприняли попытку найти лучшего поставщика, которое устройство предлагает для ваших критериев, так что это тот, который будет использоваться.
В качестве альтернативы, проверьте, существует ли поставщик, прежде чем регистрироваться для обновления:
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);
Вы также используете нуль для времени и минимального расстояния. Это идеально подходит для тестирования на виртуальном устройстве, но не забудьте изменить их при использовании реального устройства, иначе утечка аккумулятора будет высокой.
Ответ 2
предлагалось исправить это было бы использовать новый API местоположения вместо старого http://developer.android.com/google/play-services/location.html
но на самом деле все, что вам нужно сделать, это проверить
if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
если поставщик не включен, тогда он не пройдет и не сработает
Ответ 3
Когда поставщик не поддерживается, вы получаете сообщение об ошибке, самый простой способ избавиться от этой проблемы - использовать критерии.
locationManager.requestLocationUpdates(locationManager.(new Criteria(),true), 0, 0, locationListener);
В коде
критерии - критерии, которые необходимо согласовать
Второй аргумент, который является логическим:
enabledOnly - если true, возвращается только поставщик, который в настоящий момент включен.