`
kobe学java
  • 浏览: 258384 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Android获取所在地城市名2

 
阅读更多

 

Android获取所在地城市名

分类: Android网络开发 61人阅读 评论(0) 收藏 举报
[java] view plaincopy
  1. <span style="font-size:24px;">public class LocationUtils {    
  2.     
  3.     //public static String cityName = "深圳";  //城市名    
  4.     public static String cityName ;  //城市名    
  5.         
  6.     private static Geocoder geocoder;   //此对象能通过经纬度来获取相应的城市等信息    
  7.         
  8.     /**  
  9.      * 通过地理坐标获取城市名  其中CN分别是city和name的首字母缩写  
  10.      * @param context  
  11.      */    
  12.     public static void getCNBylocation(Context context){    
  13.             
  14.         geocoder = new Geocoder(context);    
  15.         //用于获取Location对象,以及其他    
  16.         LocationManager locationManager;     
  17.         String serviceName = Context.LOCATION_SERVICE;    
  18.         //实例化一个LocationManager对象    
  19.         locationManager = (LocationManager)context.getSystemService(serviceName);    
  20.         //provider的类型    
  21.         String provider = LocationManager.NETWORK_PROVIDER;    
  22.     
  23.         Criteria criteria = new Criteria();    
  24.         criteria.setAccuracy(Criteria.ACCURACY_FINE);   //高精度    
  25.         criteria.setAltitudeRequired(false);    //不要求海拔    
  26.         criteria.setBearingRequired(false); //不要求方位    
  27.         criteria.setCostAllowed(false); //不允许有话费    
  28.         criteria.setPowerRequirement(Criteria.POWER_LOW);   //低功耗    
  29.             
  30.         //通过最后一次的地理位置来获得Location对象    
  31.         Location location = locationManager.getLastKnownLocation(provider);    
  32.             
  33.         String queryed_name = updateWithNewLocation(location);    
  34.         if((queryed_name != null) && (0 != queryed_name.length())){    
  35.                 
  36.             cityName = queryed_name;    
  37.         }    
  38.             
  39.         /*  
  40.          * 第二个参数表示更新的周期,单位为毫秒;第三个参数的含义表示最小距离间隔,单位是米  
  41.          * 设定每30秒进行一次自动定位  
  42.          */    
  43.         locationManager.requestLocationUpdates(provider, 3000050,    
  44.                 locationListener);    
  45.         //移除监听器,在只有一个widget的时候,这个还是适用的    
  46.         locationManager.removeUpdates(locationListener);    
  47.     }    
  48.         
  49.     /**  
  50.      * 方位改变时触发,进行调用  
  51.      */    
  52.     private final static LocationListener locationListener = new LocationListener() {    
  53.         String tempCityName;    
  54.         public void onLocationChanged(Location location) {    
  55.                 
  56.             tempCityName = updateWithNewLocation(location);    
  57.             if((tempCityName != null) && (tempCityName.length() != 0)){    
  58.                     
  59.                 cityName = tempCityName;    
  60.             }    
  61.         }    
  62.     
  63.         public void onProviderDisabled(String provider) {    
  64.             tempCityName = updateWithNewLocation(null);    
  65.             if ((tempCityName != null) && (tempCityName.length() != 0)) {    
  66.     
  67.                 cityName = tempCityName;    
  68.             }    
  69.         }    
  70.     
  71.         public void onProviderEnabled(String provider) {    
  72.         }    
  73.     
  74.         public void onStatusChanged(String provider, int status, Bundle extras) {    
  75.         }    
  76.     };    
  77.     
  78.     /**  
  79.      * 更新location  
  80.      * @param location  
  81.      * @return cityName  
  82.      */    
  83.     private static String updateWithNewLocation(Location location) {    
  84.         String mcityName = "";    
  85.         double lat = 0;    
  86.         double lng = 0;    
  87.         List<Address> addList = null;    
  88.         if (location != null) {    
  89.             lat = location.getLatitude();    
  90.             lng = location.getLongitude();    
  91.         } else {    
  92.     
  93.             System.out.println("无法获取地理信息");    
  94.         }    
  95.              
  96.         try {    
  97.                 
  98.             addList = geocoder.getFromLocation(lat, lng, 1);    //解析经纬度    
  99.                 
  100.         } catch (IOException e) {    
  101.             // TODO Auto-generated catch block    
  102.             e.printStackTrace();    
  103.         }    
  104.         if (addList != null && addList.size() > 0) {    
  105.             for (int i = 0; i < addList.size(); i++) {    
  106.                 Address add = addList.get(i);    
  107.                 mcityName += add.getLocality();    
  108.             }    
  109.         }    
  110.         if(mcityName.length()!=0){    
  111.                 
  112.             return mcityName.substring(0, (mcityName.length()-1));    
  113.         } else {    
  114.             return mcityName;    
  115.         }    
  116.     }    
  117.     
  118.     /**  
  119.      * 通过经纬度获取地址信息的另一种方法  
  120.      * @param latitude  
  121.      * @param longitude  
  122.      * @return 城市名  
  123.      */    
  124.     public static String GetAddr(String latitude, String longitude) {      
  125.         String addr = "";      
  126.             
  127.         /*  
  128.          * 也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不过解析出来的是英文地址  
  129.          * 密钥可以随便写一个key=abc  
  130.          * output=csv,也可以是xml或json,不过使用csv返回的数据最简洁方便解析      
  131.          */    
  132.         String url = String.format(      
  133.             "http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",      
  134.             latitude, longitude);      
  135.         URL myURL = null;      
  136.         URLConnection httpsConn = null;      
  137.         try {      
  138.                 
  139.             myURL = new URL(url);      
  140.         } catch (MalformedURLException e) {      
  141.           e.printStackTrace();      
  142.           return null;      
  143.         }      
  144.             
  145.         try {      
  146.             
  147.             httpsConn = (URLConnection) myURL.openConnection();      
  148.                 
  149.             if (httpsConn != null) {      
  150.                 InputStreamReader insr = new InputStreamReader(      
  151.                         httpsConn.getInputStream(), "UTF-8");      
  152.                 BufferedReader br = new BufferedReader(insr);      
  153.                 String data = null;      
  154.                 if ((data = br.readLine()) != null) {      
  155.                     String[] retList = data.split(",");      
  156.                     if (retList.length > 2 && ("200".equals(retList[0]))) {      
  157.                         addr = retList[2];      
  158.                     } else {      
  159.                         addr = "";      
  160.                     }      
  161.                 }      
  162.                 insr.close();      
  163.             }      
  164.         } catch (IOException e) {      
  165.             
  166.             e.printStackTrace();      
  167.            return null;      
  168.         }      
  169.            return addr;      
  170.     }    
  171.         
  172. }  </span>  

 

 

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

分享到:
评论

相关推荐

    Android 获取当前位置,地区名称完整实

    在Android开发中,获取设备的当前位置以及地区名称是...以上就是Android获取当前位置及地区名称的完整实现过程中的关键知识点。在实际开发中,要根据应用的特性和用户需求,合理选择定位策略,同时关注性能和用户体验。

    android城市列表选择、定位

    在获取到位置信息后,通常会显示在地图上,并且可以将该位置与城市列表进行匹配,以确定并显示用户当前所在城市。 **最近访问和热门城市**功能则增加了用户体验的便捷性。最近访问记录保存用户最近选择的城市,可以...

    Android城市切换选择列表

    在Android开发中,城市切换选择列表是一个常见的功能,特别是在应用涉及到地理位置信息或者提供服务时,用户需要方便地选择他们的所在城市。本项目“Android城市切换选择列表”旨在提供一个高效、用户友好的解决方案...

    仿微信城市选择(android)

    在Android开发中,仿微信城市选择是一个常见的需求,主要用于用户设置个人资料或者定位服务时选取所在城市。这个功能实现的核心在于构建一个可滚动的选择界面,包含省份和城市的数据,并能够进行交互操作。以下是对...

    Android使用百度API定位当前城市得到城市名城

    在Android应用开发中,获取用户当前所在城市的地理位置信息是一项常见的需求。百度地图API提供了一种高效、便捷的方式来实现这一功能。本教程将详细介绍如何利用百度地图API来定位并获取当前城市的名字。 首先,...

    android 仿美团城市定位选择

    此外,为了让用户能够快速定位到当前所在城市,我们通常会结合定位结果自动选中最近的城市。这需要对获取到的经纬度信息与城市数据进行匹配,找到距离最近的城市。 最后,整个功能的集成和测试也是关键。确保在不同...

    根据IP取城市名称

    2. 城市定位:通过IP地址获取城市名称是一种常见的地理定位方式。这通常涉及到DNS解析、IP库查询等技术。当用户访问网站或使用应用时,服务器可以通过其IP地址获取到大致的地理位置信息,从而实现个性化推荐、广告...

    Android城市选择控件

    "当前城市"通常指的是用户的设备所在地,这可以通过GPS定位或网络IP来获取。"热门城市"是指用户经常搜索或访问的一线城市,例如北京、上海、广州等,这些数据可以从服务器获取或者根据用户行为分析得出。"历史城市...

    安卓android城市切换的demo

    在安卓(Android)开发中,实现城市切换的Demo是一个常见的需求,主要用于提供用户选择或更改其所在城市的功能。这个Demo通常包括城市定位、城市列表展示以及城市切换等多个环节。以下将详细阐述这些知识点: 1. **...

    Android通过原生方式获取经纬度与城市信息的方法

    在项目中需要获取用户所在位置的经纬度和城市上送给风控系统。一般来说,定位有两种方式: 用第三方SDK定位,如百度地图、高德地图、谷歌地图; 用Android原生SDK中的api定位; 本文讲述定位的第二种方式–用...

    Android三级城市选择demo

    这个功能在地图应用、电商应用、生活服务类应用等中非常常见,用于帮助用户精确地定位到他们所在的地理位置或者指定的送达地址。下面我们将详细探讨如何在Android中实现这样一个功能。 首先,我们需要一个数据结构...

    android 城市选择三级联动

    在Android开发中,"城市选择三级联动"是一个常见的功能需求,尤其在应用涉及到地理位置信息时。这个功能通常涉及省、市、区三个级别的选择,用户可以通过级联的方式快速找到并选择他们所在的地区。下面我们将详细...

    android 城市列表选择器 可以直接下载使用

    在Android开发中,有时我们需要实现一个功能,让用户能够选择他们所在的省份、城市和区县,这就是所谓的省市区三级联动选择器。"android 城市列表选择器 可以直接下载使用"是一个针对这种需求的解决方案,它提供了一...

    android demo,不适应GPS,通过网络定位到所在地的地址

    Android提供了`Location`服务,允许应用获取设备的位置信息。此Demo主要依赖于网络定位,而不是GPS。网络定位通常通过蜂窝网络信号塔或Wi-Fi接入点的数据来估算位置,相比GPS定位,它的优势在于不需要直接的卫星...

    android 城市选择器

    在本例中,`WheelView`被用于展示中国的省份和城市,让用户能够方便地滚动并选择他们所在的区域。 1. **WheelView的基本使用**:`WheelView`通常需要自定义数据源,如省份和城市列表。开发者需要创建一个包含所有...

    基于Android平台的城市天气预报源码 [修改]

    城市天气预报源码是针对Android平台开发的一款应用,旨在为用户提供实时、准确的气象信息,让用户可以方便地了解所在城市或任何指定城市的天气情况。这个源码经过了修改,可能包含了一些优化或新功能,使其更适合...

    Android 城市天气预报源码.rar

    Android系统提供了LocationManager和Geocoder类来获取用户的位置信息,源码可能利用这些API来定位用户所在城市并自动加载对应天气信息。 在数据存储方面,应用可能使用SharedPreferences进行轻量级的数据持久化,...

    Android 地区选择器,简洁集成,节省资源

    在Android应用开发中,地区选择器是一个常见的组件,用于让用户选择他们的城市或所在区域。"Android 地区选择器,简洁集成,节省资源"的标题表明这是一个专为开发者设计的解决方案,旨在简化集成过程,同时优化性能...

    CELLID_Android

    2. AndroidManifest.xml:需要在文件中添加相应的权限,例如 `&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;`,以允许应用访问精确的位置信息。 三、CELLID定位测试 进行CELLID定位...

    城市选择器

    它通常包含国家、省份(或州)、城市三级或四级的选择,用户可以通过这个组件方便地筛选并选择他们所在的地区。在Android应用中,城市选择器可以设计为下拉菜单、弹出对话框或者滑动选择器等形式,以适应不同场景和...

Global site tag (gtag.js) - Google Analytics