public class LocationUtils {//public static String cityName = "深圳";  //城市名public static String cityName ;  //城市名private static Geocoder geocoder;//此对象能通过经纬度来获取相应的城市等信息/** * 通过地理坐标获取城市名其中CN分别是city和name的首字母缩写 * @param context */public static void getCNBylocation(Context context){geocoder = new Geocoder(context);//用于获取Location对象,以及其他LocationManager locationManager; String serviceName = Context.LOCATION_SERVICE;//实例化一个LocationManager对象locationManager = (LocationManager)context.getSystemService(serviceName);//provider的类型String provider = LocationManager.NETWORK_PROVIDER;Criteria criteria = new Criteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度criteria.setAltitudeRequired(false);//不要求海拔criteria.setBearingRequired(false);//不要求方位criteria.setCostAllowed(false);//不允许有话费criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗//通过最后一次的地理位置来获得Location对象Location location = locationManager.getLastKnownLocation(provider);String queryed_name = updateWithNewLocation(location);if((queryed_name != null) && (0 != queryed_name.length())){cityName = queryed_name;}/* * 第二个参数表示更新的周期,单位为毫秒;第三个参数的含义表示最小距离间隔,单位是米 * 设定每30秒进行一次自动定位 */locationManager.requestLocationUpdates(provider, 30000, 50,locationListener);//移除监听器,在只有一个widget的时候,这个还是适用的locationManager.removeUpdates(locationListener);}/** * 方位改变时触发,进行调用 */private final static LocationListener locationListener = new LocationListener() {String tempCityName;public void onLocationChanged(Location location) {tempCityName = updateWithNewLocation(location);if((tempCityName != null) && (tempCityName.length() != 0)){cityName = tempCityName;}}public void onProviderDisabled(String provider) {tempCityName = updateWithNewLocation(null);if ((tempCityName != null) && (tempCityName.length() != 0)) {cityName = tempCityName;}}public void onProviderEnabled(String provider) {}public void onStatusChanged(String provider, int status, Bundle extras) {}};/** * 更新location * @param location * @return cityName */private static String updateWithNewLocation(Location location) {String mcityName = "";double lat = 0;    double lng = 0;    List 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) {// TODO Auto-generated catch blocke.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){return mcityName.substring(0, (mcityName.length()-1));} else {return mcityName;}}/** * 通过经纬度获取地址信息的另一种方法 * @param latitude * @param longitude * @return 城市名 */public static String GetAddr(String latitude, String longitude) {  String addr = "";  /* * 也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不过解析出来的是英文地址 * 密钥可以随便写一个key=abc * output=csv,也可以是xml或json,不过使用csv返回的数据最简洁方便解析     */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 = new URL(url);  } catch (MalformedURLException e) {    e.printStackTrace();    return null;  }  try {  httpsConn = (URLConnection) myURL.openConnection();      if (httpsConn != null) {  InputStreamReader insr = new InputStreamReader(  httpsConn.getInputStream(), "UTF-8");  BufferedReader br = new BufferedReader(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();     return null;  }     return addr;  }}


加上权限:





更多相关文章

  1. Android(安卓)系统信息获取(CPU,RAM,ROM,Battery,SD-card,版本等)
  2. 获取系统语言的方法
  3. only the original thread that created a view
  4. Android(安卓)获取麦克风音量
  5. Android数字签名获取证书指纹(SHA1)
  6. Android的Activity获取fragment和fragment的组件
  7. Android(安卓)中使用HttpUrlConnection实现get请求服务器
  8. 《Android(安卓)获取当前app的版本号和版本名称》
  9. Android(安卓)MediaPlayer 分析- MediaPlayerService.cpp

随机推荐

  1. Android(安卓)自定义ProgressDialog
  2. android 1.5~2.2源码下载
  3. Android(安卓)USB转 串口
  4. rk3288 7.1去掉桌面搜索框
  5. Android(安卓)通过 IMSI 判断手机运营商
  6. android ANR 案例分析
  7. android 4.0 屏蔽home键实现
  8. android jbox2d学习笔记一 滑轮关节
  9. android 获取系统一些信息
  10. github Android优秀项目源码