在我的应用程序中,我有一个广播接收器,它在收到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;
}
解决方法:
我不认为您的问题是停止服务.通过终止您的服务,您不会杀死仍在寻找更新的LocationListener对象.
我会做以下事情.
无需停止和启动服务,只需在每次需要执行某些操作时启动服务(开始收听或停止收听).
在你用来告诉你你想做什么的Intent中添加一个额外的东西,例如:
Intent GPSService = new Intent(context, TrackGPS.class);
GPSService.putExtra("IsstartTracking", true);
context.startService(GPSService);
在onStart方法覆盖服务时,您现在可以根据“IsstartTracking”的值在LocationManager的单个实例上注册和取消注册位置侦听器.
boolean startListening = intent.getExtras().getBoolean("IsstartTracking");