从Android上的LocationManager获取城市的简便方法?

时间:2012-08-21 01:57:41

标签: java android geolocation

我正在试图找出用户使用其位置的城市。使用LocationManager和Geocoder我从经度和纬度得到一些不错的数据,但我不能得到一件事。 subAdminArea a.k.a.这个城市。它总是为我返回 null ,即使收到包括邮政编码在内的所有其他内容。有什么我想念的吗?

基本上这是我要求获取数据的方法。

public String getLocation(Locale locale, Context context, boolean city, boolean postal, boolean state_prov) throws IOException{
    LocationManager locMan = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    LocationListener locList = new MyLocList();
    Geocoder gC = new Geocoder(context,locale);
    Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);
    locMan.requestLocationUpdates(locMan.NETWORK_PROVIDER, 500, 200, locList);
    Location networkLocation = locMan.getLastKnownLocation(locMan.NETWORK_PROVIDER);
    if (city)
        return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getSubAdminArea());
    else if (postal)
        return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getPostalCode());
    else if (state_prov)
        return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getAdminArea());
    else
        return "";
}

并且通过以下方式调用此方法:

String city = getLocation(Locale.getDefault(),getBaseContext(),true,false,false);

我通过一些研究发现的唯一其他选择是向

发送请求
http://maps.googleapis.com/maps/api/geocode/json?address=POSTALCODE&sensor=true

它根据邮政编码给我一个JSON的位置,我可以解析,但找到这个城市似乎需要做很多工作。

我有什么遗失的吗?或者我做错了什么?我是Android新的定位服务。

2 个答案:

答案 0 :(得分:1)

试试这个:

   Geocoder gc = new Geocoder(context, Locale.getDefault());
    List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults);

StringBuilder sb = new StringBuilder();
for (int i = 0; i < addresses.getMaxAddressLineIndex(); i++)
 Log.d("=Adress=",addresses.getAddressLine(i));
}

您将获得邮政编码,城市,国家,....

答案 1 :(得分:0)

我使用this answer并且它工作得非常好。尽管我最初在这个问题上遇到了问题,但它能够获得位置。