Службы Google Play для Android. Клиент местоположения не обновляет местоположение, если Wi-Fi отключен

Наше приложение обновляет местоположение приложения с помощью LocationClient и IntentService. Местоположение не обновляется вообще, если пользователь отключает Wi-Fi в настройках телефона.

Мы пытались протестировать приложение с PRIORITY_HIGH_ACCURACY и обновлениями местоположения при отключении Wi-Fi.

Такая же проблема, если пользователь перемещается в том месте, где нет доступных сетей Wi-Fi.

Я думаю, что правильное поведение – использование других датчиков телефона (например, GPS) для местоположения обновления, если телефон не может обновить местоположение с помощью Wi-Fi.

Действия по воспроизведению:

  1. Запустите местоположение обновления с ожидающим намерением. С параметрами

    LocationRequest request = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY) .setInterval(5 * 60 * 1000) .setFastestInterval(60*1000) .setSmallestDisplacement(70); 
  2. Отключите Wi-Fi в настройках телефона или пойдите с телефоном в стране, где нет сетей Wi-Fi.

Протестировано на Android 4.4, 4.3, 4.1, 4.0, 2.3.3. (Nexus7, Nexus4, Samsung GS2, HTC Wildfire и другие)

 public class TrackerService extends IntentService { private void startUpdateLocation() { PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, new Intent(ACTION_LOCATION_UPDATED), 0); LocationRequest request = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY) .setInterval(5 * 60 * 1000) .setFastestInterval(60*1000) .setSmallestDisplacement(70); getLocationClient().requestLocationUpdates(request, pendingIntent); Log.d(Utils.getMethodName(), "Location update started"); } private LocationClient getLocationClient() { if (mLocationClient != null && mLocationClient.isConnected()) return mLocationClient; mLocationClient = new LocationClient(this, new GooglePlayServicesClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { Log.d(Utils.getMethodName(), "Location client. Connected"); } @Override public void onDisconnected() { Log.d(Utils.getMethodName(), "Location client. Disconnected"); } }, new GooglePlayServicesClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult connectionResult) { throw new IllegalStateException("Failed connection to location manager " + connectionResult.toString()); } } ); mLocationClient.connect(); try { while (mLocationClient.isConnecting()) { Thread.sleep(200); } } catch (InterruptedException e) { throw new IllegalStateException("Thread interrupted", e); } return mLocationClient; } } 

Я попытался отправить сообщение об ошибке https://code.google.com/p/android/issues/detail?id=63110

Разработчики Android не могут помочь.

Где я могу сообщить об ошибках в сервисах Google Play?

Это ошибка в сервисах Google Play?

Какую работу вы могли бы предложить?

Мы не хотим использовать PRIORITY_HIGH_ACCURACY, потому что он разряжает аккумулятор телефона. Наше приложение отслеживает местоположение телефона, и оно не должно зависеть от настроек Wi-Fi и доступности Wi-Fi-сетей.

Solutions Collecting From Web of "Службы Google Play для Android. Клиент местоположения не обновляет местоположение, если Wi-Fi отключен"

Я нашел решение.

Google изменила документацию для локального клиента. Теперь он говорит:

Public static final int PRIORITY_BALANCED_POWER_ACCURACY

Используется с setPriority (int) для запроса точности уровня «блока».

Точность уровня блока считается равной 100-метровой точности. Использование грубой точности, такой как это часто потребляет меньше энергии.

Используя грубую точность – я думаю, это означает, что Location Client не использует GPS для местоположения обновления, если приоритет PRIORITY_BALANCED_POWER_ACCURACY.

Поэтому для использования GPS вы должны использовать PRIORITY_HIGH_ACCURACY.

Позвольте мне попытаться дать вам один ответ на этот вопрос. До нескольких минут назад у меня была такая же проблема, и я надеялся, что здесь будет ответ.

Я опишу свою проблему и решение:

Проблема. Я не получал никаких обновлений местоположения без подключения к Интернету при использовании сервисов GoogleClick LocationClient. GPS включен.

Мой код был стабильным и работал с интернет-доступом, но полевые тесты не удались.

Возможные основные причины: 1) LocationClient sucked 2) клиент местоположения не получил никаких обновлений gps

Решение. Чтобы проверить это, я попытался использовать приложение Google Maps. Он жаловался без подключения к интернету, поэтому я его дал. Затем я попытался найти себя, но появился новый экран, в котором говорилось, что я должен разрешить «приложениям Google» получать доступ к моему местоположению. Он сказал, что это не повлияет на сторонние приложения, а не на google, которая оказалась полной ерундой. Когда я включил «только приложения Google» для доступа к моему местоположению, мое приложение неожиданно начало действовать в течение нескольких секунд. Разработка для android была полна этих «моментов Google».

Если кому-то все еще интересно,

Документация Google гласит:

Если вы используете как NETWORK_PROVIDER, так и GPS_PROVIDER, вам нужно запросить только разрешение ACCESS_FINE_LOCATION, поскольку оно включает разрешение для обоих поставщиков. Разрешение для ACCESS_COARSE_LOCATION позволяет получить доступ только к NETWORK_PROVIDER.