Android - FusedLocationClient, requestLocationUpdates () не возвращает результаты и странное поведение доступности - PullRequest
0 голосов
/ 30 января 2019

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

У меня есть поведение, которое я не могу объяснить с помощью FusedLocationClient.

Я хочу получитьместоположение (только один экземпляр) для отображения некоторой информации пользователю.Для этого я звоню: mFusedLocationClient.getLastLocation().addOnSuccessListener(...)

Если местоположение getLastLocation() равно нулю.Я хочу "запустить" клиент, чтобы получить мне одно местоположение.

LocationRequest locationRequest = new LocationRequest();
locationRequest.setFastestInterval(5000);
locationRequest.setInterval(10000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

mLocationCallback = new LocationCallback() {
   @Override
   public void onLocationResult(LocationResult locationResult) {
       Timber.d("OnLocationResult entered");
       if (locationResult != null && !locationResult.getLocations().isEmpty())
           findCurrentArea();
   }

   @Override
   public void onLocationAvailability(LocationAvailability locationAvailability) {
      Timber.d("OnLocationAvailability entered");
      super.onLocationAvailability(locationAvailability);
   }
};
mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, null);

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

Странная часть:

  1. onLocationAvailability() вызывается дважды.В первый раз ответ верен, но onLocationResult() не вызывается, а затем я получаю ложь!У меня были случаи, когда мне звонили несколько раз.

  2. Такое поведение наблюдается на нескольких устройствах с Android 6-8.Пиксель 3 с Android 9 ведет себя как положено, предоставляя местоположение.

  3. Если я запускаю Карты Google на проблемных устройствах, где местоположение в этих обстоятельствах не может отображать местоположение.Если я затем выключу местоположение, я получу кнопку местоположения карты со знаком «?»в этом.Нажав кнопку на карте, я получаю всплывающее окно, которое я должен включить местоположение.ОК, что оживляет службу определения местоположения и в моем приложении !!!

  4. Если я использую случай сбоя LocationSettingsRequest и выберу автоматическое разрешение (то же самое всплывающее окно, что и у Google Maps), тогдаместоположение срабатывает правильно !!!

Так что вопрос в основном ... почему?

Что делает автоматическое разрешение всплывающих окон при включении службы определения местоположения иначе, чем при нажатии кнопки быстрого доступа.Кнопка быстрого доступа также возвращает успех при проверке настроек.Есть ли другой верный способ запросить requestLocationUpdates()?

Заранее спасибо.

...