android获取经纬度,有这个两个类需要用:

1、LocationManager位置管理器

2、Location位置类

第一步:获取LocationManager实例

locationManager = (LocationManager) mContext.getSystemService( Context.LOCATION_SERVICE );
第二步:获取位置提供器(GPS或是net)
List providers = locationManager.getProviders( true );

第三步:判断位置提供器的类型

        if (providers.contains( LocationManager.NETWORK_PROVIDER )) {            //如果是网络定位            Log.d( TAG, "如果是网络定位" );            locationProvider = LocationManager.NETWORK_PROVIDER;        } else if (providers.contains( LocationManager.GPS_PROVIDER )) {            //如果是GPS定位            Log.d( TAG, "如果是GPS定位" );            locationProvider = LocationManager.GPS_PROVIDER;        } else {            Log.d( TAG, "没有可用的位置提供器" );            return;        }

第四步:判断权限,主要是判断GPS,6.0以上需要动态获取权限,权限判断和检查是比较简单的,只是用户拒绝后的处理,各个手机品牌的适配比较复杂,如果仅仅是研究GPS的不需要判断权限,6.0以上手动给权限即可

第五步:设置位置监听器

// 监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace        locationManager.requestLocationUpdates( locationProvider, 0, 0, locationListener );

locationListener直接声明即可一般只处理onLocationChanged函数,获取location实例即可

    LocationListener locationListener = new LocationListener() {        /**         * 当某个位置提供者的状态发生改变时         */        @Override        public void onStatusChanged(String provider, int status, Bundle arg2) {        }        /**         * 某个设备打开时         */        @Override        public void onProviderEnabled(String provider) {        }        /**         * 某个设备关闭时         */        @Override        public void onProviderDisabled(String provider) {        }        /**         * 手机位置发生变动         */        @Override        public void onLocationChanged(Location location) {            location.getAccuracy();//精确度            setLocation( location );        }    };

获取location实例后经纬度的获取就非常简单了:

String address = "纬度:" + location.getLatitude() + "经度:" + location.getLongitude();

最简单的获取经纬度到这一步就成功了

获取到经纬度后解析成地理位置

                    List addList = null;                    Geocoder ge = new Geocoder(MainActivity.this);                    try {                        addList = ge.getFromLocation(location.getLatitude(), location.getLongitude(), 1);                    } catch (IOException e) {                        e.printStackTrace();                    }                    if (addList != null && addList.size() > 0) {                        for (int i = 0; i < addList.size(); i++) {                            Address ad = addList.get(i);                            address = ad.getAdminArea() + ad.getFeatureName();//拿到城市                        }                    }

贴一张ad的图,大家根据需要拿业务需要的数据


好了,暂时就写到这

<------------------------分割线------------------------->

最近发现使用原生方法逆向解析经纬度有些问题

1、有些机型上文的addList为空,具体原因,查阅了一些资料,说是google服务的问题

2、直辖市和省对象属性刚好错开了一个,对这方面有要求的注意一下

3、针对问题一,采用网络请求的方式逆向解析

请求的地址:

我只用了谷歌,百度貌似需要注册之类的

private static String GOOGLE_GPS_PREFIX = "http://maps.google.cn/maps/api/geocode/json?latlng=";private static String GOOGLE_GPS_SUFFIX = "&sensor=true,language=zh-CN";
完整请求地址为
GOOGLE_GPS_PREFIX +latitude+,+longitude+GOOGLE_GPS_SUFFIX 

请求方式

            URL url = new URL(urlPath);            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();            httpURLConnection.setReadTimeout(2000);            httpURLConnection.setConnectTimeout(5 * 1000);            httpURLConnection.setUseCaches(true);            httpURLConnection.setRequestMethod("GET");            if (httpURLConnection.getResponseCode() == 200) {                InputStream inputStream = httpURLConnection.getInputStream();                InputStreamReader isr = new InputStreamReader(inputStream);                BufferedReader br = new BufferedReader(isr);                String temp = null;                StringBuffer jsonsb = new StringBuffer();                while ((temp = br.readLine()) != null) {                    jsonsb.append(temp);                }                return jsonsb;            }            httpURLConnection.disconnect();

返回的是一个json值,需要的同学可以自行根据需要解析自己需要的值

偶尔jsonsb值为错误信息,可以使用while多请求几次,推荐使用AsyncTask进行网络请求和解析,网络请求不能放到主线程

用Thread我又觉得太麻烦,各位看官如果有更好的想法,欢迎留言讨论

20180322

更多相关文章

  1. android获取经纬度和地方名称
  2. android学习轨迹之二:Android权限标签uses-permission的书写位置
  3. Android 获取手机本地图片所在的位置
  4. Android启动时启动Activity 的定义的位置
  5. Android数据存储路径位置
  6. Android 权限全集
  7. Android GPS获取地理位置
  8. Android 获取手机当前所在的经纬度
  9. Android 利用adb命令 使App自动点击屏幕指定位置

随机推荐

  1. android获取手机的所有通讯录的号码和sim
  2. android 开发,用一行代码操作只使用一次
  3. android Dialog实例
  4. Android里边如何使用二级列表
  5. Android 字体设置
  6. hudson/android emulator 无法启动
  7. Android中Fragment生命周期
  8. android studio实时预览报错
  9. android 使用fastjson解析json数据
  10. cpp通过Message掉java