获取其国家/地区语言的位置名称

时间:2018-03-04 18:48:47

标签: android google-maps

我正在开发一个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()返回电话区域设置而不是真实的区域设置地址。

如果你们中的一个人能给我任何关于如何解决问题的建议,我很乐意听到。谢谢!

2 个答案:

答案 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)