Android-谷歌地图-获取所在地城市名

public class LocationUtils {

 
    //publicstatic String cityName = "深圳";  //城市名
      publicstatic String cityName ;  //城市名
     
      privatestatic Geocodergeocoder;      //此对象能通过经纬度来获取相应的城市等信息
     
     
      publicstatic void getCNBylocation(Context context){
           
            geocoder =new Geocoder(context);
            //用于获取Location对象,以及其他
            LocationManager locationManager;
            StringserviceName = Context.LOCATION_SERVICE;
            //实例化一个LocationManager对象
            locationManager =(LocationManager)context.getSystemService(serviceName);
            //provider的类型
            Stringprovider = LocationManager.NETWORK_PROVIDER;

            Criteriacriteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);      //高精度
            criteria.setAltitudeRequired(false);      //不要求海拔
            criteria.setBearingRequired(false);      //不要求方位
            criteria.setCostAllowed(false);      //不允许有话费
            criteria.setPowerRequirement(Criteria.POWER_LOW);      //低功耗
           
            //通过最后一次的地理位置来获得Location对象
            Locationlocation = locationManager.getLastKnownLocation(provider);
           
            Stringqueryed_name = updateWithNewLocation(location);
            if((queryed_name != null) && (0 !=queryed_name.length())){
                 
                  cityName =queryed_name;
            }
           
           
            locationManager.requestLocationUpdates(provider, 30000, 50,
                        locationListener);
            //移除监听器,在只有一个widget的时候,这个还是适用的
            locationManager.removeUpdates(locationListener);
      }
     
     
      privatefinal static LocationListener locationListener = newLocationListener() {
            StringtempCityName;
            public voidonLocationChanged(Location location) {
                 
                  tempCityName= updateWithNewLocation(location);
                  if((tempCityName != null) &&(tempCityName.length() != 0)){
                       
                        cityName =tempCityName;
                  }
            }

            public voidonProviderDisabled(String provider) {
                  tempCityName= updateWithNewLocation(null);
                  if((tempCityName != null) &&(tempCityName.length() != 0)) {

                        cityName =tempCityName;
                  }
            }

            public voidonProviderEnabled(String provider) {
            }

            public voidonStatusChanged(String provider, int status, Bundle extras) {
            }
      };

     
      privatestatic String updateWithNewLocation(Location location) {
            StringmcityName = "";
            double lat =0;
            double lng =0;
            List<Address> addList = null;
            if (location!= null) {
                  lat =location.getLatitude();
                  lng =location.getLongitude();
            } else{

                  System.out.println("无法获取地理信息");
            }
             
            try {
                 
                  addList =geocoder.getFromLocation(lat, lng,1);      //解析经纬度
                 
            } catch(IOException e) {
                  // TODOAuto-generated catch block
                  e.printStackTrace();
            }
            if (addList!= null && addList.size()> 0) {
                  for (int i =0; i < addList.size(); i++) {
                        Address add= addList.get(i);
                        mcityName +=add.getLocality();
                  }
            }
            if(mcityName.length()!=0){
                 
                  returnmcityName.substring(0, (mcityName.length()-1));
            } else{
                  returnmcityName;
            }
      }

     
      publicstatic String GetAddr(String latitude, String longitude){ 
            String addr= ""; 
           
           
            String url =String.format( 
                  "http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s", 
                  latitude,longitude); 
            URL myURL =null; 
            URLConnection httpsConn = null; 
            try{ 
                 
                  myURL = newURL(url); 
            } catch(MalformedURLException e) { 
              e.printStackTrace(); 
              return null; 
           
           
            try{ 
           
                  httpsConn =(URLConnection) myURL.openConnection(); 
                 
                  if(httpsConn != null) { 
                        InputStreamReader insr = newInputStreamReader( 
                                    httpsConn.getInputStream(), "UTF-8"); 
                        BufferedReader br = newBufferedReader(insr); 
                        String data= null; 
                        if ((data =br.readLine()) != null) { 
                              String[]retList = data.split(","); 
                              if(retList.length > 2&& ("200".equals(retList[0]))){ 
                                    addr =retList[2]; 
                              } else{ 
                                    addr =""; 
                             
                       
                        insr.close(); 
                 
            } catch(IOException e) { 
           
                  e.printStackTrace(); 
                returnnull; 
           
                returnaddr; 
      }
     
}


加上权限:

<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值