所以我创建了一个访问用户位置的应用程序,然后使用Geocoder解释(反向地理编码),如下所示:
Geocoder gc = new Geocoder(ctx, Locale.getDefault());
List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults);
Address address = addresses.get(0);
town = address.getLocality();
countryCd = address.getCountryCode();
但是我发现地理编码器服务真的不可靠,IOException和服务经常不可用。
我已经阅读了涉及向地理编码服务发送垃圾邮件的解决方案,直到它给出了结果,而其他人则表示该服务每15秒只允许每个IP地址一次点击。
有时重启设备会使服务再次可用。
该主题是否有其他API或方法?
答案 0 :(得分:0)
那里有一个解决方案: android problem to get latitude & longitude from a given address
仅举一个替代方案,您可以使用Google地图的REST 基于reverse geocoder。您可以将此作为后备使用。如 你也会在你的应用程序中使用Google地图,你应该很好 使用API规则。
答案 1 :(得分:-1)
public void getAddress(double lat, double lng) {
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
Address obj = addresses.get(0);
String add = obj.getAddressLine(0);
GUIStatics.currentAddress = obj.getSubAdminArea() + ","
+ obj.getAdminArea();
GUIStatics.latitude = obj.getLatitude();
GUIStatics.longitude = obj.getLongitude();
GUIStatics.currentCity= obj.getSubAdminArea();
GUIStatics.currentState= obj.getAdminArea();
add = add + "\n" + obj.getCountryName();
add = add + "\n" + obj.getCountryCode();
add = add + "\n" + obj.getAdminArea();
add = add + "\n" + obj.getPostalCode();
add = add + "\n" + obj.getSubAdminArea();
add = add + "\n" + obj.getLocality();
add = add + "\n" + obj.getSubThoroughfare();
Log.v("IGA", "Address" + add);
// Toast.makeText(this, "Address=>" + add,
// Toast.LENGTH_SHORT).show();
// TennisAppActivity.showDialog(add);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
使用它可能对你有帮助。
答案 2 :(得分:-1)
由于您的实施,您可能会收到IOException和Service Unavailable。
阅读此最佳做法:http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html
(它比API更好)和开源!