我正在开发一个Android应用程序,显示世界各地的公园,我得到了下一个问题的堆栈:
在我的应用程序中,我希望用户在地图上选择一个他正在创建的新公园的地方,并且我希望其他人能够看到他的公园,无论他们身在何处。因此,为了做到这一点,我需要确保公园的位置名称是公园所在国家/地区的语言。例如,如果公园位于希腊,其位置名称将为希腊语。如果公园在美国,它的名字将是英文。 所以为了使它成为可能,我需要能够获得公园地址的区域设置。
为了获得公园的名称,我使用以下代码:
public String getAddressName(Latlng latLng){
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
try{
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
geocoder = new Geocoder(this, addresses.get(0).getLocale());
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
if (addresses.size() > 0)
return addresses.get(0).getAddressLine(0);
}
return null;
}
问题是此代码返回手机默认语言中的位置。
为了解决这个问题,我需要替换当前latLng的Locale中的行Locale.getDefault()
。
我尝试更改代码并执行
geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
geocoder = new Geocoder(this, addresses.get(0).getLocale());
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
但它不起作用,因为addresses.get(0).getLocale()
返回电话区域设置而不是真实的区域设置地址。
如果你们中的一个人能给我任何关于如何解决问题的建议,我很乐意听到。谢谢!
答案 0 :(得分:2)
最终我找到了解决方案。
我使用了this similar question的答案。 这个解决方案与MeosCoder对这个问题的回答非常相似。
现在,我的代码如下所示:
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
String markerAddress = "";
try {
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
String langCode = null;
String countryCode = null;
if (addresses.size() > 0) {
countryCode = addresses.get(0).getCountryCode();
addresses = null;
Locale[] locales = Locale.getAvailableLocales();
for (Locale localeIn : locales) {
if (countryCode.equalsIgnoreCase(localeIn.getCountry())) {
langCode = localeIn.getLanguage();
break;
}
}
if (langCode != null) {
Locale locale = new Locale(langCode, countryCode);
geocoder = new Geocoder(this, locale);
try {
addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
} catch (IOException | IndexOutOfBoundsException | NullPointerException ex) {
addresses = null;
}
}
}
答案 1 :(得分:1)
试试这个。您可以从latlon位置获取语言代码或语言名称。
alist = [[0], [1], [2]]
blist = [-1, 0, 1]
for a, b in zip(alist, blist):
a.append(b)