2011-01-24 55 views
4

在我的應用程序中,我有一個廣播接收器,它在收到SMS消息中的關鍵字後開始跟蹤手機GPS位置的服務。我做到這一點使用 -如何從廣播接收器中取消註冊聽衆和停止服務

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

我還需要能夠在在SMS消息接收另一個關鍵字停止服務,我試圖做到這一點,但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

上使用bind()和unbind()的例子我不認爲你的問題是停止服務。通過殺死你的服務,你不會殺死仍在尋找更新的LocationListener對象。

我會做以下事情。

而不是停止和啓動您的服務,只需開始您的服務,每次你需要做的事情(開始聆聽或停止聆聽)。

添加一個額外的給你用它來告訴你,你想做的事,像什麼意圖:

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

在你的服務你的OnStart方法覆蓋,您現在就可以註冊和註銷的一個位置監聽器您的LocationManager基於「IsStartTracking」的值的單個實例

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

搞亂了這個方法之後,我弄明白了,你是傳奇!我會在上面發佈我的代碼,因爲onStart方法已被棄用。 – bobby123 2011-01-25 18:16:17

0

假設你正在創建的TrackGPS服務和Android的服務,當類綁定和取消綁定從您的服務,您可以創建了一個包含約束和客戶的跟蹤計數器,當最後一個客戶端被解除綁定,關閉其監聽器到gps。

我假設你是否註冊LocationListener,那麼你可以找出如何從服務中解除綁定。有一個客戶應該如何在Service documentation

相關問題