高德地图使用——定位功能

article/2025/11/5 21:59:57

在上一次中我们说到了如何申请key值,和在Application中如何配置,以及将地图显示出来。如果没看过的朋友们可以看一下笔者上一篇文章:最新高德地图使用(SDK6.3.0版本)——申请key、显示地图。在这一篇中,我们将了解如何实现高德地图定位功能。

相比于上一篇来说,我感觉这一篇的内容应该不会那么多,因为实现定位的功能实在是太简单了,只是涉及到几个类而已。在看代码之前,我们先看一下实现定位需要涉及到的几个类吧:

AMapLocationClient类

这个类是定位服务类,我们通过这个类实现定位。AMapLocationClient类主要涉及到的工作有:

  • 启动、停止定位
  • 设置、移除监听器
  • 设置定位参数(AMapLocationClientOption类,之后会详细介绍这个类)

1.构造方法

public AMapLocationClient(Context var1)

AMapLocationClient类的构造方法传入一个上下文参数,我们最好通过getApplicationContext方法获取全局Context,或者自定义Application中添加全局Context来获取。

2.常用方法

限定符

返回值

方法名

解释

public

void

setLocationOptionAMapLocationClientOption option

设置定位参数

public

void

setLocationListenerAMapLocationListener listener

设置定位回调监听

public

void

unRegisterListenerAMapLocationListener listener

移除定位监听

public

void

startLocation()

开始定位

public

void

stopLocation()

停止定位

public

AMapLocation

getLastKnownLocation()

获取最后一次定位的位置信息

public

void

enableBackgroundLocationint NotificationIdNotification notification

开启后台定位功能

开启后会显示一个通知栏

public

void

disableBackgroundLocationboolean removeNotification

关闭后台定位功能

主要的方法就是上述的几个,其实感觉也没什么好说的了,因为上面表格中已经说的很清楚了。

AMapLocationClientOption类

AMapLocationClientOption类用来进行定位方式的配置。主要工作有:

  • 定位间隔设置
  • 定位模式等设置
  • 是否返回相关属性

1.构造方法

他的构造方法没什么好说的,默认构造方法。

2.嵌套类

AMapLocationClientOption类内部有三个枚举类型。分别是AMapLocationMode、AMapLocationProtocol、AMapLocationPurpose、GeoLanguage。来一起看一下吧:

AMapLocationMode:
public static enum AMapLocationMode {Battery_Saving,Device_Sensors,Hight_Accuracy;private AMapLocationMode() {}
}

Battery_Saving

高精度定位模式:在这种定位模式下,将同时使用高德网络定位和GPS定位,优先返回精度高的定位

Device_Sensors

仅设备定位模式:在这种模式下,将只使用GPS定位。

Hight_Accuracy

高精度定位模式:在这种定位模式下,将同时使用高德网络定位和GPS定位,优先返回精度高的定位


AMapLocationProtocol:
public static enum AMapLocationProtocol {HTTP(0),HTTPS(1);private int a;private AMapLocationProtocol(int var3) {this.a = var3;}public final int getValue() {return this.a;}
}

HTTP:在这种定位协议下,会使用http请求定位

HTTPS:在这种定位协议下,会使用https请求定位


AMapLocationPurpose:
public static enum AMapLocationPurpose {SignIn,Transport,Sport;private AMapLocationPurpose() {}
}

Signin:签到场景 只进行一次定位返回最接近真实位置的定位结果(定位速度可能会延迟1-3s)

Sport:运动场景 高精度连续定位,适用于有户内外切换的场景,GPS和网络定位相互切换,GPS定位成功之后网络定位不再返回,GPS断开之后一段时间才会返回网络结果

Transport:出行场景 高精度连续定位,适用于有户内外切换的场景,GPS和网络定位相互切换,GPS定位成功之后网络定位不再返回,GPS断开之后一段时间才会返回网络结果


GeoLanguage:不是很重要,我们不说了-。+!


3.常用方法

限定符

返回值

方法名

解释

public

AMapLocationClientOption

setIntervallong interval

发起定位时间间隔

public

AMapLocationClientOption

setLocationCacheEnableboolean

是否使用缓存策略

默认true(如果为true,在多次定位是会使用缓存值,如果想连续获取位置就设为false

public

AMapLocationClientOption

setLocationModeAMapLocationMode

设置定位模式

public

AMapLocationClientOption

setLocationProtocolAMapLocationProtocol

设置网络协议

public

AMapLocationClientOption

setLocationPurposeAMapLocationPurpose

设置定位场景

public

AMapLocationClientOption

setNeedAddressboolean

设置设置返回地址信息

默认true

public

AMapLocationClientOption

setOnceLocationboolean

设置单次定位

默认false

public

AMapLocationClientOption

setOnceLocationLastestboolean

设置是否等待WIFI列表刷新

定位精度更高,但速度更慢

public

AMapLocationClientOption

setSensorEnableboolean

是否使用传感器

默认false

public

AMapLocationClientOption

setWifiScanboolean

是否允许WIFI刷新

默认true


AMapLocation类

AMapLocation类用于保存定位完成之后的位置信息(经纬度,地址等等。。。)

关于他的方法就不列举了,全都是setset。。。。。只要知道英文应该都能看懂的哈哈!


AMapLocationListener接口

这个就很明确了,只是一个回调接口,在定位位置改变时候进行回调的。他只有一个抽象方法:

public interface AMapLocationListener {void onLocationChanged(AMapLocation var1);
}


接下来给大家带来一个例子:

Demo

public void startLocate() {AMapLocationClient mLocationClient = null;AMapLocationListener mLocationListener = this;mLocationClient = new AMapLocationClient(MyApplication.getSingleContext());mLocationClient.setLocationListener(mLocationListener);AMapLocationClientOption mLocationClientOption = new AMapLocationClientOption();mLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);mLocationClientOption.setOnceLocation(false);mLocationClientOption.setOnceLocationLatest(true);mLocationClientOption.setInterval(3000);mLocationClientOption.setSensorEnable(true);mLocationClientOption.setLocationCacheEnable(false);//生成本地缓存,不区分单次定位还是多次定位,默认true,如果想要连续获取位置就设置成false。if (null != mLocationClient) {mLocationClient.setLocationOption(mLocationClientOption);//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效mLocationClient.stopLocation();mLocationClient.startLocation();NotificationCompat.Builder builder = new NotificationCompat.Builder(MyApplication.getSingleContext(),"1");builder.setContentText("asd").setContentTitle("你好");mLocationClient.enableBackgroundLocation(2,builder.build());}view.startLocateResponse(mLocationClient);
}

由于这个是被本人已经用MVP重构了的,所以只给大家展示涉及到定位的相关代码了。我们注意一下,AMapLocationListener设为了this,所以在本地一定重写了onLocationChanged方法:

@Override
public void onLocationChanged(AMapLocation aMapLocation) {view.onLocationChangedResponse(aMapLocation);
}

不要注意那么多细节,我们只需要知道在view的这个方法里面写的刷新定位的代码就好,我们点进去看一下:

@Override
public void onLocationChangedResponse(AMapLocation aMapLocation) {if (aMapLocation.getErrorCode() == 0) {Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress() + "\n 经度:" +aMapLocation.getLongitude() + "\n 纬度:" +aMapLocation.getLatitude() + "\n 海拔: " +aMapLocation.getAltitude() + "\n 定位精度" +aMapLocation.getAccuracy());//可在其中解析amapLocation获取相应内容。} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}
}

然后效果就给大家打印日志了:


好了,今天的文章就到这里了,喜欢的朋友希望多多支持一下,你们的支持是笔者最大的动力!


http://chatgpt.dhexx.cn/article/DhHqbNxT.shtml

相关文章

高德地图之定位篇-----定位、预测天气、围栏、搜索周边、行踪轨迹

跟集成百度地图一样,首先获取KEY,获取方式(官方的截图) 这篇主要是讲解高德地图定位篇,高德地图定位篇跟高德地图篇是不同的sdk,分离开了。。。 来看下配置流程吧,配置是第一位的 1.从网站下载并解压得到定…

解决电脑自动修复蓝屏问题(你的电脑未正确启动)

一.问题描述 电脑长时间未开机,开机蓝屏,显示自动修复,你的电脑未正确启动,如下图所示: 二。解决问题 1.点击高级选项-》疑难解答-》命令提示符: 2.在命令行中输入cd c:\windows\system32\drivers 3.再输…

如何完美解决解决win10系统--无法自动修复此计算机问题

前言 今天遇到一个糟心的问题就是开机时电脑无法正常开启,如图片所示。然后网上搜集了各种解决的办法都不管用,特别是百度给出的方法,根本就是坑人。如果你不想重装系统,而且想保留本电脑已有的程序和文件,可以参考本…

台式电脑怎么进入修复计算机,电脑为什么提示自动修复?电脑开机提示自动修复的解决办法...

小编朋友的电脑总是会出现一些奇奇怪怪的问题,这不电脑开机后就莫名其妙的提示需要启动修复,电脑无法正常启动导致无法使用,这问题该如何解决呢?可以参考小编下面的教程,看看对你有没有帮助。 电脑开机提示自动修复 ●…

当电脑开不了机出现自动修复时

当电脑开不了机出现自动修复时 电脑突然间开不了机,一直出现自动修复,然后修复失败。如下图 让人头疼,找了一下,有点担心时硬盘坏了,点了高级选项,选择疑难解答,再点高级选项,里面…

服务器开机提示修复,电脑开机提示自动修复怎么办?win10电脑开机提示自动修复教程...

我们在使用电脑的时候,开机后一般都会进入桌面。但有时候打开电脑后提示自动修复,显示电脑未能正确启动。电脑开机提示自动修复怎么办?下面就让小编为大家带来win10电脑开机提示自动修复教程。 首先大家一定会和我一样想这个问题,…

电脑开机显示自动修复失败无法进入系统的解决方法

案例场景 前几天由于电脑突然蓝屏,重启后,结果开机进不了系统,蓝屏显示自动修复失败,立马选了启动修复,但可想而知不起作用,如此重复多次后还是于事无补。经过两个小时的折腾,终于成功进入系统。…

电脑自动修复重启无法进入系统问题解决方案

电脑管家提示电脑需要修复漏洞,在修复之后使电脑睡眠了,可能定时重启的原因,导致了电脑不正常关机,打开电脑后就出现了蓝屏的情况,反复重启都无法进入系统,电脑里很多重要的东西,又不想重装系统…

windows10自动修复无法开机

Windows10操作系统于2015年7月29日正式发布,此后,win10也就成了新上市的笔记本电脑或者台式机电脑的预装操作系统!win10系统给我们带了全新的体验,当然也带来了一定的烦恼!就拿win10自动修复这个功能来说,玩…

电脑自动修复失败无限重启解决办法win10

1.写在前面的话 1.首先希望大家都有一个备份的意识,当电脑第一次出现问题时,你查了各种方法费尽九牛二虎之力修好,一定要设置一个系统还原点,这样以后电脑坏掉还有的救。 2.非必要情况,不要强制关机。 3.不要自己拆…

win10系统开机自动修复失败的解决方法

事情是这样的,在某一天的傍晚帮对象装了一个arcgis软件,学学科地理的同学应该都要用的,当然作为一个没有正版资源的人,首选了荡来的安装包,并试图安装,经过一顿操作,确认各项功能都可以正常使用…

win10自动修复电脑无法正常启动

问题描述: 昨天遇到的这个问题,起因是电脑卡,反复重启后还是觉得卡,于是强制关机,结果出现蓝屏,自动修复,电脑无法正常启动。参考了网上的相关解决方法,尝试在高级选项里面选择“禁用…

台式电脑怎么进入修复计算机,电脑开机提示自动修复怎么办?电脑开机自动修复处理方法...

对于很多电脑用户来说,偶尔会遇到电脑开机提示自动修复的情况,由于电脑无法正常开机,导致无法使用,问题显得就比较棘手了。首先大家一定会和小编一样想这个问题为什么我的电脑会出现这个提示? 电脑开机提示自动修复 ●…

计算机自动进入自动修复界面,电脑提示自动修复?戳这里几招解决,方法简单实用!...

原标题:电脑提示自动修复?戳这里几招解决,方法简单实用! 很多用户遇到一个这样的问题,也不知道是什么原因,电脑有时候一开机就出现“启动修复”的界面。是不是没有正常将系统关闭呢?好像之前删过…

Win10自动修复无法开机【完美解决】

Windows10操作系统于2015年7月29日正式发布,此后,win10也就成了新上市的笔记本电脑或者台式机电脑的预装操作系统!win10系统给我们带了全新的体验,当然也带来了一定的烦恼!就拿win10自动修复这个功能来说,玩…

Win10无法开机提示自动修复无法修复你的电脑的有效解决方法

最近Win10系统出现了无法开机并无法自动修复系统的问题,然后提示了“自动修复,无法修复你的电脑”,在高级选项中尝试安全模式也无法进入。那么遇到这个问题,在不重装系统的情况下,我们要如何解决呢?下面装机…

Windows“自动修复”无法修复

想必很多Windows系统的用户都遇到了这个问题吧,本以为重启能解决所有问题,结果发现无限套娃了……怀揣着电脑里的猫片要丢失的担忧,死活不愿意重置的笔者找到了一种无须重置电脑,windows下的任何文件也不会丢失的简单修复方法。 废…

解决win10 自动修复失败电脑无法开机问题

写在前面的话: 1.博主不定期上线,所以有时候看到私信的时候,时间已经过去好久了,所以就不会回复私信了; 2.再就是写这篇博客仅仅是为了记录一下自己解决该问题的办法,博主本人对修电脑这方面也不是很在行&a…

电脑开机显示无法自动修复计算机,电脑开机提示自动修复怎么办?

对于经常使用电脑的用户来说,偶尔会遇到电脑开机提示自动修复的情况。电脑无法正常开机,随便操作又怕丢了电脑数据。接下来快启动为大家带来几招电脑开机进入自动修复状态的处理方法,有需要的朋友请继续往下看。 电脑开机提示自动修复 ●我之…

关于windows 10开机自动修复的解决办法

关于windows 10开机自动修复的解决办法 我们的windows 10电脑会因为安装软件等原因造成系统开机自动进入修复模式(比如手残的我用360强制修复explorer.exe报错),一遍遍重启后自动进入修复模式,然后电脑自己又修复不了&#xff0c…