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

本文介绍了一种通过经纬度获取当前位置城市的实用方法。使用了Geocoder解析经纬度,并通过LocationManager获取位置信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"/>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值