高德地图使用——定位功能
在上一次中我們說到了如何申請key值,和在Application中如何配置,以及將地圖顯示出來。如果沒看過的朋友們可以看一下筆者上一篇文章:最新高德地圖使用(SDK6.3.0版本)——申請key、顯示地圖。在這一篇中,我們將了解如何實現高德地圖定位功能。
相比于上一篇來說,我感覺這一篇的內容應該不會那么多,因為實現定位的功能實在是太簡單了,只是涉及到幾個類而已。在看代碼之前,我們先看一下實現定位需要涉及到的幾個類吧:
AMapLocationClient類
這個類是定位服務類,我們通過這個類實現定位。AMapLocationClient類主要涉及到的工作有:
- 啟動、停止定位
- 設置、移除監聽器
- 設置定位參數(AMapLocationClientOption類,之后會詳細介紹這個類)
1.構造方法
public AMapLocationClient(Context var1)AMapLocationClient類的構造方法傳入一個上下文參數,我們最好通過getApplicationContext方法獲取全局Context,或者自定義Application中添加全局Context來獲取。
2.常用方法
限定符 | 返回值 | 方法名 | 解釋 |
public | void | setLocationOption(AMapLocationClientOption option) | 設置定位參數 |
public | void | setLocationListener(AMapLocationListener listener) | 設置定位回調監聽 |
public | void | unRegisterListener(AMapLocationListener listener) | 移除定位監聽 |
public | void | startLocation() | 開始定位 |
public | void | stopLocation() | 停止定位 |
public | AMapLocation | getLastKnownLocation() | 獲取最后一次定位的位置信息 |
public | void | enableBackgroundLocation(int NotificationId,Notification notification) | 開啟后臺定位功能 (開啟后會顯示一個通知欄) |
public | void | disableBackgroundLocation(boolean 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 | setInterval(long interval) | 發起定位時間間隔 |
public | AMapLocationClientOption | setLocationCacheEnable(boolean) | 是否使用緩存策略 默認true(如果為true,在多次定位是會使用緩存值,如果想連續獲取位置就設為false) |
public | AMapLocationClientOption | setLocationMode(AMapLocationMode) | 設置定位模式 |
public | AMapLocationClientOption | setLocationProtocol(AMapLocationProtocol) | 設置網絡協議 |
public | AMapLocationClientOption | setLocationPurpose(AMapLocationPurpose) | 設置定位場景 |
public | AMapLocationClientOption | setNeedAddress(boolean) | 設置設置返回地址信息 默認true |
public | AMapLocationClientOption | setOnceLocation(boolean) | 設置單次定位 默認false |
public | AMapLocationClientOption | setOnceLocationLastest(boolean) | 設置是否等待WIFI列表刷新 定位精度更高,但速度更慢 |
public | AMapLocationClientOption | setSensorEnable(boolean) | 是否使用傳感器 默認false |
public | AMapLocationClientOption | setWifiScan(boolean) | 是否允許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());} }然后效果就給大家打印日志了:
好了,今天的文章就到這里了,喜歡的朋友希望多多支持一下,你們的支持是筆者最大的動力!
總結
以上是生活随笔為你收集整理的高德地图使用——定位功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uni-app 调用安卓 高德sdk获取
- 下一篇: WebStorm设置中文,直接安装官方插