Что лучший способ состоит в том, чтобы ожидать местоположения GPS, фиксируют?

Используя мое приложение Android, когда пользователь делает определенные действия, фоновый сервис запускается, который выбирает текущее местоположение GPS и сохраняет его в базе данных, кроме того, выполнения некоторого другого материала. В том сервисе я использую requestLocationUpdates() от LocationManager класс и ожидает до onLocationChanged() из моего LocationListener (который реализован сервисом), запущен. Но что лучший способ состоит в том, чтобы ожидать onLocationChanged стрелять? Я должен просто опросить на переменной и ожидать, пока она не установлена? Какие-либо подсказки?

Примечание: Я не могу просто записать в базу данных в onLocationChanged() из-за некоторого другого материала.

Править: К clearfy моя ситуация я могу представить пример, подобный моему случаю: Скажем, пользователь нажимает кнопку и метод myMethod запущен, который возвратит некоторый объект. Затем в этом myMethod я зарегистрируюсь для обновлений информации о местоположении от GPS (использование requestLocationChanged) и, кроме того, ожидайте пользовательского местоположения и используйте его для чего-то. Другими словами, myMethod не может возвратиться, прежде чем местоположение присутствует. Я не знаю, как я могу использовать onLocationChanged в этом случае.

5
задан Guido 25 August 2010 в 15:19
поделиться

3 ответа

Что я делаю, так это устанавливаю вид на главном экране на индикатор выполнения неопределенного length, установите requestLocationUpdates () и просто вернитесь обратно пользователю.Если вам нужно заблокировать пользователя до тех пор, пока местоположение не будет определено, вы можете открыть диалоговое окно поверх своей активности, в котором нет элементов управления и представление индикатора выполнения. Затем в обратном вызове onLocationChanged вы можете закрыть этот диалог и продолжить свой бизнес.

РЕДАКТИРОВАТЬ: Я снова прочитал ваш вопрос и, кажется, понял лучше. Мое первое предложение - посмотреть, сможете ли вы избавиться от фоновой службы. Вам не нужно беспокоиться о том, что приложение перестает отвечать в ожидании блокировки GPS, потому что API GPS является асинхронным. Если по какой-либо причине вы не можете этого сделать, вам придется взглянуть на API передачи сообщений, чтобы ваша фоновая служба могла отправлять сообщение в ваше основное действие, когда данные GPS доступны. См. Руководство разработчика .

0
ответ дан 15 December 2019 в 06:21
поделиться

Я думаю, вам следует использовать методы ожидания / уведомления. У вас должен быть какой-то объект блокировки. Вы вызываете lockObject.wait () в своем методе. И вы вызываете lockObject.notify () в onLocationChanged. Таким образом, ваш метод не вернется, пока не будет получен onLocationChanged.

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

0
ответ дан 15 December 2019 в 06:21
поделиться

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

3
ответ дан 15 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: