2011-01-24 92 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