我最近开始在 Android 上编程。在我的应用程序中,我想用文字告诉用户他们的位置,例如:“华盛顿”或“纽约”。我已经看到我可以得到纬度和经度,但我想用文字(可能是一个字符串)来告诉位置。
我可以做吗?如果可以,怎么做?
准确到多少?它可以给我城市的名称还是只给我州的名称?
谢谢您的帮助!
这是一个完整的示例代码,使用 Thread 和 Handler 在不阻塞 UI 的情况下获取 Geocoder 答案。
Geocoder 调用过程,可以位于一个 Helper 类中
public static String getAddressFromLocation(final Location location, final Context context, final Handler handler)
{
Thread thread = new Thread() {
@Override public void run()
{
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (list != null && list.size() > 0)
{
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality()+","+address.getCountryName();
}
}
catch (IOException e)
{
Log.e(TAG, "Impossible to connect to Geocoder", e);
}
}
};
thread.start();
return result;
}
您可以使用反向地理编码器来实现它。一个示例代码:
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(latValue,
longValue, 1);
if (addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder(
"Address:\n");
for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress
.append(returnedAddress.getAddressLine(i)).append(
"\n");
}
myAddress.setText(strReturnedAddress.toString());
} else {
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Canont get Address!");
}
只需在获得纬度和经度值后放置此代码。
只要看看这个你会得到你想要的一切,
http://developer.android.com/training/basics/location/geocoding.html