Android获取所在地城市名

分类:Android网络开发 61人阅读 评论(0) 收藏 举报 [java] view plain copy
  1. <spanstyle="font-size:24px;">publicclassLocationUtils{
  2. //publicstaticStringcityName="深圳";//城市名
  3. publicstaticStringcityName;//城市名
  4. privatestaticGeocodergeocoder;//此对象能通过经纬度来获取相应的城市等信息
  5. /**
  6. *通过地理坐标获取城市名其中CN分别是city和name的首字母缩写
  7. *@paramcontext
  8. */
  9. publicstaticvoidgetCNBylocation(Contextcontext){
  10. geocoder=newGeocoder(context);
  11. //用于获取Location对象,以及其他
  12. LocationManagerlocationManager;
  13. StringserviceName=Context.LOCATION_SERVICE;
  14. //实例化一个LocationManager对象
  15. locationManager=(LocationManager)context.getSystemService(serviceName);
  16. //provider的类型
  17. Stringprovider=LocationManager.NETWORK_PROVIDER;
  18. Criteriacriteria=newCriteria();
  19. criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
  20. criteria.setAltitudeRequired(false);//不要求海拔
  21. criteria.setBearingRequired(false);//不要求方位
  22. criteria.setCostAllowed(false);//不允许有话费
  23. criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
  24. //通过最后一次的地理位置来获得Location对象
  25. Locationlocation=locationManager.getLastKnownLocation(provider);
  26. Stringqueryed_name=updateWithNewLocation(location);
  27. if((queryed_name!=null)&&(0!=queryed_name.length())){
  28. cityName=queryed_name;
  29. }
  30. /*
  31. *第二个参数表示更新的周期,单位为毫秒;第三个参数的含义表示最小距离间隔,单位是米
  32. *设定每30秒进行一次自动定位
  33. */
  34. locationManager.requestLocationUpdates(provider,30000,50,
  35. locationListener);
  36. //移除监听器,在只有一个widget的时候,这个还是适用的
  37. locationManager.removeUpdates(locationListener);
  38. }
  39. /**
  40. *方位改变时触发,进行调用
  41. */
  42. privatefinalstaticLocationListenerlocationListener=newLocationListener(){
  43. StringtempCityName;
  44. publicvoidonLocationChanged(Locationlocation){
  45. tempCityName=updateWithNewLocation(location);
  46. if((tempCityName!=null)&&(tempCityName.length()!=0)){
  47. cityName=tempCityName;
  48. }
  49. }
  50. publicvoidonProviderDisabled(Stringprovider){
  51. tempCityName=updateWithNewLocation(null);
  52. if((tempCityName!=null)&&(tempCityName.length()!=0)){
  53. cityName=tempCityName;
  54. }
  55. }
  56. publicvoidonProviderEnabled(Stringprovider){
  57. }
  58. publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){
  59. }
  60. };
  61. /**
  62. *更新location
  63. *@paramlocation
  64. *@returncityName
  65. */
  66. privatestaticStringupdateWithNewLocation(Locationlocation){
  67. StringmcityName="";
  68. doublelat=0;
  69. doublelng=0;
  70. List<Address>addList=null;
  71. if(location!=null){
  72. lat=location.getLatitude();
  73. lng=location.getLongitude();
  74. }else{
  75. System.out.println("无法获取地理信息");
  76. }
  77. try{
  78. addList=geocoder.getFromLocation(lat,lng,1);//解析经纬度
  79. }catch(IOExceptione){
  80. //TODOAuto-generatedcatchblock
  81. e.printStackTrace();
  82. }
  83. if(addList!=null&&addList.size()>0){
  84. for(inti=0;i<addList.size();i++){
  85. Addressadd=addList.get(i);
  86. mcityName+=add.getLocality();
  87. }
  88. }
  89. if(mcityName.length()!=0){
  90. returnmcityName.substring(0,(mcityName.length()-1));
  91. }else{
  92. returnmcityName;
  93. }
  94. }
  95. /**
  96. *通过经纬度获取地址信息的另一种方法
  97. *@paramlatitude
  98. *@paramlongitude
  99. *@return城市名
  100. */
  101. publicstaticStringGetAddr(Stringlatitude,Stringlongitude){
  102. Stringaddr="";
  103. /*
  104. *也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不过解析出来的是英文地址
  105. *密钥可以随便写一个key=abc
  106. *output=csv,也可以是xml或json,不过使用csv返回的数据最简洁方便解析
  107. */
  108. Stringurl=String.format(
  109. "http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",
  110. latitude,longitude);
  111. URLmyURL=null;
  112. URLConnectionhttpsConn=null;
  113. try{
  114. myURL=newURL(url);
  115. }catch(MalformedURLExceptione){
  116. e.printStackTrace();
  117. returnnull;
  118. }
  119. try{
  120. httpsConn=(URLConnection)myURL.openConnection();
  121. if(httpsConn!=null){
  122. InputStreamReaderinsr=newInputStreamReader(
  123. httpsConn.getInputStream(),"UTF-8");
  124. BufferedReaderbr=newBufferedReader(insr);
  125. Stringdata=null;
  126. if((data=br.readLine())!=null){
  127. String[]retList=data.split(",");
  128. if(retList.length>2&&("200".equals(retList[0]))){
  129. addr=retList[2];
  130. }else{
  131. addr="";
  132. }
  133. }
  134. insr.close();
  135. }
  136. }catch(IOExceptione){
  137. e.printStackTrace();
  138. returnnull;
  139. }
  140. returnaddr;
  141. }
  142. }</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" />

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android(安卓)分组列表适配器 MyExpandableAdapter
  3. android截取屏幕图
  4. android 获取手机中的联系人
  5. Android动态获取当前手机IP地址
  6. Android获取包相关信息--code
  7. 获取Android系统信息
  8. Android(安卓)打开文件管理器 获取文件的真实路径
  9. Android(安卓)AGPS 定位 测试程序

随机推荐

  1. android eclipse集成环境
  2. Android内核驱动——电源管理
  3. Android主题切换
  4. android 开发 文件读写应用案例分析
  5. Android试手——Dota铃声
  6. Android系列教程之四:Activity的生命周期
  7. Android入门进阶教程(1)-android扫盲
  8. 友盟深坑分享
  9. 画图技巧
  10. Android中使用handler