微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐