在我的应用程序中,我有一个广播接收器,它在收到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;
}
答案 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()