Сбой Android из-за нулевых критериев

#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, чтобы увидеть, какие поставщики могут быть доступны.