Android 快速获得当前所在地理位置(简单定位)

一、背景

在项目开发过程中,有时候我们可能需要用到定位功能,但是只是简单定个位,并不要求实现地图、周边、检索、路线等其他额外的功能,所以我们引入百度或者高德地图sdk就有些得不偿失了。其实如果只需要一个简单定位,Android已经为我们提供了获取经纬度的方法。

二、概述

借助Android本身的LocationManager这个类提供的方法来获取经纬度

实现起来也很简单,首先获取LocationManager的对象:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

其次选择要使用的位置提供器,GPS或网络定位,两种定位方式各有特点,GPS定位精度高,但是非常耗电,网络定位精度稍低,但耗电量比较小:

private String judgeProvider(LocationManager locationManager) {
        List<String> prodiverlist = locationManager.getProviders(true);
        if(prodiverlist.contains(LocationManager.NETWORK_PROVIDER)){
            return LocationManager.NETWORK_PROVIDER;//网络定位
        }else if(prodiverlist.contains(LocationManager.GPS_PROVIDER)) {
            return LocationManager.GPS_PROVIDER;//GPS定位
        }else{
            Toast.makeText(activity.getMyContext(),"没有可用的位置提供器",Toast.LENGTH_SHORT).show();
        }
        return null;
    }

最后获取包含当前位置信息(比如经度纬度)的Location对象:

public Location beginLocatioon() {
        //获得位置服务
        locationManager = activity.getLocationManager();
        provider = judgeProvider(locationManager);
        //有位置提供器的情况
        if (provider != null) {
            //为了压制getLastKnownLocation方法的警告
            if (ActivityCompat.checkSelfPermission(activity.getMyContext(), Manifest.permission.ACCESS_FINE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(activity.getMyContext(), Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
                return null;
            }
            return locationManager.getLastKnownLocation(provider);
        }else{
            //不存在位置提供器的情况
            Toast.makeText(activity.getMyContext(),"不存在位置提供器的情况",Toast.LENGTH_SHORT).show();
        }
        return null;
    }

记得不要忘了添加权限,而且自 android6.0 起,app不会在安装时授予权限,而是在运行时一个一个向用户询问是否授予权限。到此,我们就可以通过上述方法获取当前位置的经纬度信息了。

<!--定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

通过百度地图提供的Web服务API,进行反地理编码,将我们的经纬度转换成正常的位置信息

首先我们先登录百度地图开放平台,并创建一个服务端类型应用,其中IP白名单如果没有限制直接填写0.0.0.0/0。

这里写图片描述

其次查看百度地图Web服务文档提供的逆地理编码请求网址和返回的json信息,并查看当前服务是否满足自己的项目要求,因为服务配额是有限制的,例如未认证的个人用户,日配额(次)6000,分钟并发数(次/分钟)3000。

这里写图片描述

最后的网络请求代码我就不展示了,有兴趣的可以下载demo进行查看,本例中使用的Retrofit2.0进行的网络请求,运行结果如下:

简单定位运行效果

源码点击下载

猜你喜欢

转载自blog.csdn.net/MingJieZuo/article/details/79755357