ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-10 05:24:26  阅读:331  来源: 互联网

标签:android listener gps service 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,listener,gps,service,broadcastreceiver
来源: https://codeday.me/bug/20190710/1420769.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有