android – 如何从broadcastreceiver中取消注册监听器和停止服务

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...