Android 快速获得当前所在地理位置(简单定位)
程序员文章站
2022-06-11 18:58:21
...
一、背景
在项目开发过程中,有时候我们可能需要用到定位功能,但是只是简单定个位,并不要求实现地图、周边、检索、路线等其他额外的功能,所以我们引入百度或者高德地图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进行的网络请求,运行结果如下:
源码点击下载
下一篇: 力扣20有效的括号题解