【问题标题】:Stop Location Listener in Android在 Android 中停止位置侦听器
【发布时间】:2011-10-17 04:16:41
【问题描述】:

在我的 android 应用程序中,我需要在应用程序启动时获取用户的当前 GPS 位置,前提是位置与之前的位置相比发生了变化。但问题是当我在应用程序内部时,如果位置发生变化(ie 如果用户在使用应用程序时正在旅行)应用程序从头开始。

获取用户当前位置后,我需要停止位置监听器。 removeUpdates 方法对我不起作用。

请帮助我解决这个问题。 提前致谢!

【问题讨论】:

  • removeUpdates 是要走的路,你能展示一些代码说明它为什么不起作用吗?

标签: android gps android-location locationlistener


【解决方案1】:
mLocManager.removeUpdates(locationListenerObject);
mLocManager = null;

当 lat 和 long 已被侦听器捕获时,在您的 onLocationChange 方法中调用它。

希望我能帮上忙……

【讨论】:

  • 调用 onLocationChange 方法可能需要一些时间。大概1秒左右。对吗?
  • 谢谢这个工作。奇怪的是 .removeUpdates() 要我们请求权限!
【解决方案2】:

您可以通过在停止 LocationListener locationManager.removeUpdates(mLocListener); 后将其对象设置为 null 来停止 LocationListener,即当您希望它停止获取纬度和经度时 mLocListener = null;

【讨论】:

  • 我只是在实际设备上尝试过,它并没有删除监听更新
  • 出于好奇,如果我们已经调用了removeUpdates(locationListener l),为什么还要将侦听器设置为null?
【解决方案3】:

您可以通过调用方法locationManager.removeUpdates(locationListener)来停止持续的位置更新。

这是一个例子:

LocationManager locationManager; 
LocationListener locationListener;

// for location updates 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

// stop location updating
locationManager.removeUpdates(locationListener);

【讨论】:

    【解决方案4】:
    locationManager.requestSingleUpdate(String provider, LocationListener listener, Looper looper);
    

    如果您只需要获取一次当前位置,请尝试使用此方法代替

    locationManager.requestLocationUpdates(String provider, long minTimeMs, float minDistanceM, LocationListener listener)
    

    并使用locationManager.removeUpdates(LocationListener listener)停止更新

    希望这能奏效并帮助其他有同样问题的人。

    【讨论】:

      【解决方案5】:

      试试这个

      locationManager = activity!!.getSystemService(Context.LOCATION_SERVICE) as LocationManager
      
      locationListener = object : LocationListener {
                  override fun onLocationChanged(location: Location) {
                      if (location != null) {
                          Log.e(
                              "LOCATION",
                              "Latitude " + location.latitude.toString() + "  | Longitude :" + location.longitude.toString()
                          )
                          if (locationListener != null)
                              locationManager!!.removeUpdates(locationListener!!)
                      }
                      //Toast.makeText(getApplicationContext(),location.toString(),Toast.LENGTH_SHORT).show();
                  }
      
                  override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {
                  }
      
                  override fun onProviderEnabled(provider: String) {
                  }
      
                  override fun onProviderDisabled(provider: String) {
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2017-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        • 2017-05-11
        相关资源
        最近更新 更多