如何取消注册Listener&从广播接收者处停止服务

时间:2011-01-24 20:32:05

标签: android service gps listener broadcastreceiver

在我的应用程序中,我有一个广播接收器,它在收到SMS消息中的关键字时,会启动跟踪手机GPS位置的服务。我这样做 -

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;
}

2 个答案:

答案 0 :(得分:1)

我认为您的问题不在于停止服务。通过终止您的服务,您不会杀死仍在寻找更新的LocationListener对象。

我会做以下事情。

不是停止和启动服务,只需在每次需要做某事时启动服务(开始收听或停止收听)。

在您使用的Intent中添加一个额外内容,告诉您要执行的操作,例如:

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

在您的onStart方法覆盖服务中,您现在可以根据“IsStartTracking”的值在ListManager的单个实例上注册和取消注册位置侦听器

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

答案 1 :(得分:0)

假设您正在创建TrackGPS服务和Android服务,当您从服务中绑定和取消绑定类时,您可以创建一个计数器来跟踪绑定的客户端,并且当最后一个客户端未绑定时,将其侦听器关闭到全球定位系统。

我假设您是否注册了LocationListener,那么您可以弄清楚如何从服务中取消绑定。有一个示例说明客户端应如何在Service documentation

使用bind()和unbind()