停止位置侦听器服务 Android

Posted

技术标签:

【中文标题】停止位置侦听器服务 Android【英文标题】:Stop Location Listener Service Android 【发布时间】:2017-11-05 09:36:16 【问题描述】:

我需要从位置侦听器中删除更新,我已经尝试了一些代码但无法正常工作。

我从片段调用了一个服务来获取位置更新,但是当我在我的位置监听器服务中点击一个调用此方法的触发器时,我需要停止位置监听器:

public void stopUsingGPS() 
    if (locationManager != null) 
        locationManager.removeUpdates(this);
        locationManager = null;
        stopSelf();
        Toast.makeText(mContext, "off pressed" , Toast.LENGTH_SHORT).show();
    

@Override onLocationChanged(Location location) 上的位置监听器仍在更新。

实际上,当我将 locationManager.removeUpdates(this); 放入 onLocationChanged(); 时,它正在工作

所以我尝试在onLocationChanged();中给出条件

Boolean stop = false;

public void stopUsingGPS() 
    if (locationManager != null) 
        stop = true;

        Toast.makeText(mContext, "off pressed" , Toast.LENGTH_SHORT).show();
    


@Override
public void onLocationChanged(Location location) 

    if(stop)
        locationManager.removeUpdates(this);
    else
        Toast.makeText(mContext, String.valueOf(location.getLatitude()) , Toast.LENGTH_SHORT).show();    
    


但仍然无法正常工作。即使我调用了stopUsingGPS() 方法,覆盖仍将 stop 读为 false。

请帮忙,在此先感谢。

【问题讨论】:

你在使用 LocationManager 类吗?如果是这样,该课程已经很老了,并且不支持该课程。我建议您改用 Fused Location 切换到 Google Location API。 developer.android.com/training/location/…当然,这个api需要设备有Google Play服务。 嗯好的谢谢,我去看看 【参考方案1】:

onStartCommand ---> Service.START_STICKY

@Override
public void onDestroy() 
    locationManager.removeUpdates(listener);
    locationManager=null;
    super.onDestroy();
    Log.v("STOP_SERVICE", "DONE");

    locationManager.removeUpdates(listener);
    locationManager=null;

【讨论】:

以上是关于停止位置侦听器服务 Android的主要内容,如果未能解决你的问题,请参考以下文章

Android 位置服务:我可以为 GPS 和网络位置使用单个位置侦听器吗?

位置侦听器从服务而不是 IntentService 工作

在我重新激活 WiFi/移动网络之前,服务中的 Android 位置侦听器不起作用

在后台每 10 分钟检查一次位置

一旦您调用取消注册位置侦听器,Gps 状态侦听器就会停止运行

Android 定位服务已停止