Страница 1 из 1

Не могу остановить Service.

Добавлено: 06 июн 2013, 16:19
Vovich
Здраствуйте.
Хочу получать данные GPS в Service.
в главной Activity 2 кнопки - запуск и остановка сервиса.

Код: Выделить всё

	public void onClickStart(View v) {
		startService (new Intent(this, MyService.class));
	}
	
	public void onClickStop(View v) {
		stopService (new Intent(this, MyService.class));
	}
Сервис запускается нормально.
В нем начинаю работу с GPS и отрабатываю получение координат

Код: Выделить всё

	public int onStartCommand(Intent intent, int flags, int startId) {
		myManager = (LocationManager) getSystemService(LOCATION_SERVICE);
		myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 5, this);	

		return super.onStartCommand(intent, flags, startId);
	}

	public void onLocationChanged(Location location) {
		// TODO Auto-generated method stub
		  Toast.makeText(this, "Сработал GPS", Toast.LENGTH_LONG).show();
	}
Спутники ловятся, периодически появляется Toast.
Но при нажатии кнопки Стоп в главной активити, остановки сервиса не происходит.
Значек GPS остается и Toast дальше появляется.

Подскажите, плиз, как сервис все-таки остановить.
В общем задача стоит так - в фоне получать координаты и писать их в базу. Запись в базу планирую организовать через поток, вызываемый из этого сервиса.

Re: Не могу остановить Service.

Добавлено: 06 июн 2013, 18:48
Foenix
извини, с сервисами не работала, но прочитав 2 первые строчки урока 93
http://startandroid.ru/ru/uroki/vse-uro ... rvisa.html
поняла, что останавливается он другой командой тоже, может ее попробовать?..

Re: Не могу остановить Service.

Добавлено: 07 июн 2013, 08:59
Vovich
Там немного не тот случай. Сервис выполнил работу и остановил себя (в случае с GPS можно сколь угодно долго получать координаты). Я хочу из Activity запускать сервис кнопкой, а когда надо - другой кнопкой (из той же Activity) его останавливать.

Re: Не могу остановить Service.

Добавлено: 07 июн 2013, 09:18
Mikhail_dev
Первое
[syntax=java]
public int onCreate() {
myManager = (LocationManager) getSystemService(LOCATION_SERVICE);
myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 5, this);
}
[/syntax]
Делай лучше запуск GPS в onCreate, а не в onStartCommand, потому что onStartCommand срабатывает всегда при повторных нажатиях, а onCreate не сработает второй раз, если сервис уже запущен.
Второе. При остановке сервиса, в его методе onDestroy() производи остановку всех вещей сервиса. Это могут быть какие-то слушатели. Останавливай и получение координат
locationManager.removeUpdates(this);

Re: Не могу остановить Service.

Добавлено: 07 июн 2013, 11:10
Vovich
Спасибо за помощь. Попробую. А кнопка - это пока учусь.
и все-таки
locationManager.removeUpdates(this) - надо выполнять в сервисе, где он и запущен.
Если бы я запускал GPS из Activity понятно. Одной кнопкой запустил, другой остановил.

Re: Не могу остановить Service.

Добавлено: 07 июн 2013, 12:00
Mikhail_dev
Да, я именно это и имел ввиду, в onDestroy() самого сервиса. Наверное просто не так выразился. Этот метод есть как в активити, так и в сервисе
Т.е.
[syntax=java]
@Override
public void onDestroy() {
//отключение тут всех слушателей, а после
locationManager.removeUpdates(this)
super.onDestroy();
}
[/syntax]

Re: Не могу остановить Service.

Добавлено: 07 июн 2013, 12:14
Vovich
понял!

подтормаживаю...

Спасибо. Четко сработало.

Re: Не могу остановить Service.

Добавлено: 29 сен 2014, 23:36
Cobimen
stopService(new Intent(this, Service.class))