#android
#Android
Вопрос:
У меня есть следующий код, который выходит из строя из-за того, что критерии равны нулю.
По какой-то причине строка best равна null. Есть идеи, почему?
private void startGPS() {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
String best = locationManager.getBestProvider(criteria, true);
Log.v(DEBUG_TAG, "Best provider: " best);
locationManager.requestLocationUpdates(best, 50, 0, this);
}
Комментарии:
1. Что вы пытаетесь реализовать? Есть какой-нибудь журнал сбоев?
Ответ №1:
getBestProvider(criteria, true)
вернет только включенных поставщиков. Поскольку вы запрашиваете, Criteria.ACCURACY_FINE
вы должны получить GPS, но если он не включен, вы получите null
.
Комментарии:
1. Да, спасибо, глупый я, я не получил правильного разрешения в своем манифесте, поэтому из-за этого он продолжал сбой.
2. не могли бы вы предоставить требуемые разрешения? Я сталкиваюсь с той же проблемой.
3. Разрешениями являются: ACCESS_FINE_LOCATION» /> ACCESS_COARSE_LOCATION» />
4. Вы должны проверить
null
. Что делать, если у пользователя отключен GPS в настройках или на устройстве нет GPS?
Ответ №2:
Из документации:
«Будут возвращены только провайдеры, доступ к которым разрешен для вызывающей активности. Если несколько поставщиков соответствуют критериям, возвращается тот, который обладает наилучшей точностью. Если ни один поставщик не соответствует критериям, критерии ослабляются в следующей последовательности […]»
Это означает, что если критерии слишком строгие, то выполняется поиск следующего лучшего. Таким образом, значение null будет возвращено, если либо провайдеры не включены, либо у вас нет разрешения на доступ к провайдеру.
Проверьте свой манифест. Также проверьте результат getProviders(); с параметром false, чтобы увидеть, какие поставщики могут быть доступны.