2011-01-24 10 views
4

내 앱에는 SMS 메시지의 키워드를 수신하면 전화의 GPS 위치를 추적하는 서비스가 시작되는 브로드 캐스트 수신기가 있습니다. 나는이 사용하는 - 나는 또한 SMS 메시지에 다른 키워드를 받으면 서비스를 중지 할 수 있어야합니다브로드 캐스트 수신기에서 리스너 및 서비스 중지 방법

context.startService(new Intent(context,TrackGPS.class)); 

, 나는이 일을 시도했지만 GPS 센서는 여전히에서 위치와 GPS 아이콘이 깜박 추적 화면의 상단.

context.stopService(new Intent(context, TrackGPS.class)); 

내가 GPS 수신기가 등록 할 필요가 있기 때문에이 될 수도 그림 - 나는 사용하여이 작업을 수행하기 위해 노력했다. 누구든지이 서비스를 중지하고 텍스트 수신시 GPS 추적을 중지하도록 도울 수 있습니까? 미리 감사드립니다.

솔루션

@Override 
public int onStartCommand(Intent GPSService, int flags, int startId) { 
    boolean startListening = GPSService.getExtras().getBoolean("IsStartTracking"); 
    if (startListening == true){ 
     lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
    } 
    else { 
     lm.removeUpdates(this); 
     stopSelf(); 
    } 
    return 1; 
} 

답변

1

문제가 서비스를 중지하지 않는다고 생각합니다. 서비스를 종료하면 여전히 업데이트를 찾고있는 LocationListener 객체가 종료되지 않습니다.

다음과 같이 처리합니다.

서비스를 중지하고 시작하는 대신 무언가를해야 할 때마다 (듣기 시작 또는 듣기 중지) 서비스를 시작하기 만하면됩니다.

당신이, 같은 수행 할 작업을 당신에게 사용 의도에 별도의 추가 : 서비스의 당신의 ONSTART 방법 재정에서

Intent GPSService = new Intent(context, TrackGPS.class); 
GPSService.putExtra("IsStartTracking", true); 
context.startService(GPSService); 

을, 당신은 지금 등록하고에 위치 리스너의 등록을 취소 할 수 있습니다 "IsStartTracking"값을 기반으로 한 LocationManager의 단일 인스턴스

boolean startListening = intent.getExtras().getBoolean("IsStartTracking"); 
+0

이 방법으로 어지럽게 몰아 친 후에 나는 당신이 전설이라고 !! onStart 메소드가 더 이상 사용되지 않으므로 위에 코드를 게시합니다. – bobby123

0

때 당신은 당신이하고 바인딩하는 클라이언트를 추적 카운터를 만들 수 있습니다 서비스에서 TrackGPS 서비스와 안드로이드 클래스가 결합 서비스 및 바인딩 해제를 만드는 가정 마지막 클라이언트는 언 바운드되어 리스너는 gps로 종료됩니다.

LocationListener를 등록하면 서비스에서 바인딩 해제하는 방법을 알 수 있습니다. 클라이언트가 bind() 및 unbind()를 사용하는 방법에 대한 예제가 있습니다. Service documentation

관련 문제