Android 地理编码器类解释

Android 地理编码器类解释,android,reverse-geocoding,Android,Reverse Geocoding,谁能告诉我反向地理编码器是如何工作的。我有使用getFromlocation和getLastKnownLocation查找地址的代码。问题是我不知道如何使用OnLocationChanged,以及在我不需要它时如何禁用侦听器。在过去的两天里,我完全不知所措。如果有人能提供我一些完整的例子或链接,这将是伟大的好资源 Geocoder geocoder = new Geocoder( TrackLogic.this.getApp

谁能告诉我反向地理编码器是如何工作的。我有使用getFromlocation和getLastKnownLocation查找地址的代码。问题是我不知道如何使用OnLocationChanged,以及在我不需要它时如何禁用侦听器。在过去的两天里,我完全不知所措。如果有人能提供我一些完整的例子或链接,这将是伟大的好资源

                Geocoder geocoder = new Geocoder(
                    TrackLogic.this.getApplicationContext(),
                    Locale.getDefault());
            Location locationGPS = locationManager
                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
            Location locationNetwork = locationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            Log.d(TAG, "geocoder works");

首先,您需要获取LocationManager实例和要用于进行位置查找的提供程序的名称。例如:

String provider = LocationManager.NETWORK_PROVIDER;
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
接下来,调用requestLocationUpdates(…),如下所示:

这可以在主线程上调用,因为(我认为)系统将在后台线程上使用指定的提供程序进行位置查找。当找到一个位置时,Android系统将调用onLocationChanged(…)回调,您需要覆盖该回调。由于您正在尝试进行地址查找,您将输入:

Geocoder geocoder = new Geocoder(this);
geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10)
这会让你得到你想要的

当您使用完定位服务后,您可以拨打

locationManager.removeUpdates(this)

如果我使用locationManager.getLastKnownLocation和geocoder.getFromLocation会发生什么?我不知道。我只使用了getFromLocation()。我认为getFromLocation()的结果将覆盖getLastKnownLocation()的内容。你用这个API干什么?当他点击一个按钮时,我试图检索用户的位置。但我总是得到奇怪的反应。有时它返回null和其他东西。什么返回null?如果未启用位置提供程序,则getLastKnownLocation()可以返回null。在使用位置服务之前,您可以尝试做的一件事是遍历每个提供程序并调用isProviderEnabled()。结果是位置提供程序没有返回任何内容。这就是它为null的原因。不过我有一个疑问。。我的代码在第一次尝试时正确显示地址。它显示上次存储的地址
locationManager.removeUpdates(this)