在我的Android应用程序中,我需要在应用程序启动时获取用户的当前GPS位置,仅当位置与先前位置有所不同时。但问题是当我在应用程序内部时,如果位置发生变化(即如果用户在使用应用程序时正在旅行)应用程序从头开始。
我需要在获取用户当前位置后停止位置监听器。 removeUpdates方法对我不起作用。
请帮我解决这个问题。 提前谢谢!
答案 0 :(得分:53)
mLocManager.removeUpdates(locationListenerObject);
mLocManager = null;
当听众捕获了lat和long时,在onLocationChange
方法中调用此方法。
希望我能帮助..
答案 1 :(得分:6)
您可以通过在停止LocationListener locationManager.removeUpdates(mLocListener);
后将其对象设为null来停止LocationListener,当您希望它停止获取纬度和经度时,可以mLocListener = null;
。
答案 2 :(得分:0)
您可以通过调用方法locationManager.removeUpdates(locationListener)
停止连续的位置更新。
这里是一个例子:
LocationManager locationManager;
LocationListener locationListener;
// for location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
// stop location updating
locationManager.removeUpdates(locationListener);
答案 3 :(得分:0)
c2.round
如果您只需要获取一次当前位置,请尝试使用此方法
locationManager.requestSingleUpdate(String provider, LocationListener listener, Looper looper);
并使用locationManager.requestLocationUpdates(String provider, long minTimeMs, float minDistanceM, LocationListener listener)
希望这行之有效,并可以帮助遇到相同问题的其他人。
答案 4 :(得分:0)
尝试一下
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) {
}
}