Как вы называете это, он вернет все провайдеры, включенные или нет, потому что вы передаете его как ложное, что, вероятно, является вашим намерением, но вы проверили возвращаемую строку?
mBestProvider = mLocationManager.getBestProvider(criteria, false);
Возможно, вы пользуетесь провайдером gps или сетевым провайдером, я научился не доверять механизму критериев, потому что он работает по-разному для каждого оператора и устройства (из-за этого у меня появились странные ошибки )
Поэтому я всегда спрашиваю конкретно о gps и сетевых провайдерах и проверяю последних из них, а затем использую алгоритм, чтобы определить лучшего из них.
Сетевой провайдер может использовать ячейку или точку доступа / маршрутизаторы Wi-Fi для определения местоположения (Google хранит базу данных с информацией Wi-Fi), так что можно получить исправление с помощью только Wi-Fi, не говоря, что это происходит, но возможно.
Если это не приносит результатов, возможно, они просто кэшируют последнее обновление местоположения в настройках, некоторые приложения делают это. Чтобы проверить тезис, если все вышеперечисленное не сработает, просто оставьте телефон в этом состоянии и, если возможно, переместитесь в совсем другое место с такими же свойствами, что займет всего 2000 метров. Если ваше приложение все еще сообщает об отсутствии и размещает отчеты о старом местоположении, у вас есть свой ответ.
Если в местах сообщалось о новом местоположении с помощью Wi-Fi, а ваше приложение не может (при условии, что вы действительно подтверждаете, что получаете сетевого провайдера), то есть вероятность, что они используют частный API через Google Location Server (GLS) / MASF сервер через частичную информацию о сотовых / Wi-Fi, но это на крайнем конце кривой оловянной фольги.