Когда возникает onPerformSync
, мне нужно текущее местоположение, но я не хочу настраивать отдельную службу, которая постоянно активно запрашивает местоположение, потому что мой период SyncAdapter
экспоненциально отступает, так что периоды между синхронизациями могут быть много часов Кроме. Было бы расточительно иметь запросы местоположения, выполняемые между каждой синхронизацией.SyncAdapter onPerformSync получает текущее местоположение
Я планирую использовать GoogleApiClient
и LocationServices.FusedLocationApi.requestLocationUpdates
, затем Thread.sleep(###)
onPerformSync
нить до тех пор, пока не будет найдено местоположение.
Тем не менее, я прочитал, что requestLocationUpdates
должен быть вызван на main looper and that it makes callbacks on that thread, и в этом случае я ожидаю, что он не сможет вернуть результаты местоположения, потому что я спал по потоку, который его назвал.
Нужно ли мне начинать собственный поток петлителя?
Есть ли другой/лучший способ получить текущее местоположение от onPerformSync
?
Это не работает для меня, 'onLocationChanged' никогда не вызывался. –
Проверьте, что у вас есть использование - разрешение ACCESS_FINE_LOCATION в манифесте. Если вы настроите таргетинг и работаете на Android 6.0 (уровень API 23) или выше, вам нужно будет попросить у пользователя разрешения на доступ к местоположению в части пользовательского интерфейса вашего приложения, после того как оно предоставлено, оно должно работать и с синхронизатором. Но, возможно, это просто время, прежде чем найти место. –
Я попытался получить местоположение с разрешением ACCESS_COARSE_LOCATION. Когда я изменил его на ACCESS_FINE_LOCATION, проблема была исправлена. –