В моем приложении пользователь будет запрашивать обновления местоположения.Когда это происходит, основное действие запускает Службу, которая запускает запрос местоположения.
Моя проблема в том, что если службы запускаются, скажем, 3 раза в течение двух минут, то они не работают должным образом.
Таким образом, в основном мне нужен сервис, чтобы перевести запрос на запуск до полного завершения текущего запуска.
Каждый раз, когда запускается мой сервис, это может занять до десяти минут.для завершения, и служба отвечает на каждый запрос на запуск по-разному в зависимости от данных о намерениях, которые были ему переданы.это произошло в течение двухминутного периода, но данные о намерениях могут отличаться от каждого из трех начальных запросов.
Итак, я попытался использовать IntentService, чтобы преодолеть это и обработать все три запроса по одному, но затем
LocationManager.requestLocationUpdates(...)
не вызывается.Я понимаю, что это, вероятно, связано с тем, что onHandleIntent (...) почти сразу же завершает работу и, по сути, не дает времени на запрос местоположения для ответа.У меня есть обработчик, который останавливает запрос местоположения через 7 минут (3 минуты для тестирования), а затем информация о местоположении передается другим методам, которые возвращают обновления пользовательского интерфейса пользователю.Обновления пользовательского интерфейса возвращаются, они просто нулевые, потому что обновления местоположения не выполняются.
Я думаю, что я мог бы использовать onHandleIntent в IntentService, чтобы запустить мой сервис и передать ему данные намерения, но это похоже на действительноплохая практика, и, вероятно, есть лучший способ сделать это. РЕДАКТИРОВАТЬ: Это определенно не будет работать, потому что onHandleIntent в любом случае немедленно запустит мой сервис location, поэтому не будет никакого периода ожидания.
Кроме того, любые тосты, вызываемые в onHandleIntent, вообще не отображаются,хотя все из моего onCreate () работает так, как должно.
Мне очень трудно найти ответ на этот вопрос, и любая помощь будет принята с благодарностью.Вот суть моего кода:
public class myService extends IntentService {
public findMyDroidService() {
super("findMyDroidService");
}
@Override
protected void onHandleIntent(Intent intent){
intent.getExtras();
fromIntentString = intent.getStringExtra("toIntentStringExtra");
Toast.makeText(this, fromIntentString, Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Intent Handled", Toast.LENGTH_SHORT).show();
locMan.requestLocationUpdates(locListener,...);
}
@Override
public void onCreate(){
super.onCreate();
locListener = new LocationListener(){
//code goes here
}
}
}
Кроме того, мой слушатель местоположения создается в onCreate ();