【高德地圖】Android高德地圖初始化定位并顯示小藍點

📖第3章 初始化定位并顯示小藍點

      • ?第1步:配置AndroidManifest.xml
      • ?第2步:設置定位藍點
      • ?第3步:初始化定位
      • ?完整代碼

image-20231229003619023

?第1步:配置AndroidManifest.xml

  1. 在application標簽下聲明Service組件
<service android:name="com.amap.api.location.APSService"></service>
  1. 聲明權限
 <!--地圖相關--><uses-permission android:name="android.permission.INTERNET" /> <!-- 訪問網絡--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 網絡定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- GPS定位 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 訪問WiFi網絡定位 --><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 獲取wifi權限,進行網絡定位 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 用于讀數據 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 用于寫入緩存數據到擴展存儲卡 --><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 用于申請調用A-GPS模塊 --><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 如果設置了target >= 28 如果需要啟動后臺定位則必須聲明這個權限 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允許程序獲取網絡狀態-->
  1. 設置高德Key,在上一步顯示地圖時已經完成
<meta-data android:name="com.amap.api.v2.apikey" android:value="key">//開發者申請的key       </meta-data>

?第2步:設置定位藍點

       //設置了定位的監聽aMap.setLocationSource(this);//初始化定位藍點樣式類MyLocationStyle myLocationStyle;myLocationStyle = new MyLocationStyle();myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//設置定位模式myLocationStyle.interval(2000); //只在連續定位模式下生效myLocationStyle.showMyLocation(true);//設置是否顯示定位小藍點// 將定位藍點移動到屏幕中心myLocationStyle.anchor(0.5f, 0.5f).myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);aMap.setMyLocationStyle(myLocationStyle);aMap.setMyLocationEnabled(true);// 是否啟動顯示定位藍點,默認是false

如果你不想顯示藍點精度圓圈,可以參考下面設置:

        myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));//設置定位藍點精度圓圈的邊框顏色:無色myLocationStyle.radiusFillColor(Color.argb(0, 255, 255, 255)); // 設置精度圓圈背景色:透明無色

?第3步:初始化定位

  1. 實現LocationSourceAMapLocationListener接口,重寫activatedeactivateonLocationChanged方法。
 @Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {}@Overridepublic void deactivate() {}@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {}
  1. activate中實現定位激活。
    private OnLocationChangedListener mListener;//聲明位置監聽private AMapLocationClient mlocationClient;//聲明定位客戶端private AMapLocationClientOption mLocationOption;//聲明定位參數配置選項/*** 激活定位*/@Overridepublic void activate(LocationSource.OnLocationChangedListener listener) {mListener = listener;if (mlocationClient == null) {//初始化定位try {mLocationOption = new AMapLocationClientOption();//初始化定位參數mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//設置為高精度定位模式mlocationClient = new AMapLocationClient(this);//聲明定位客戶端mlocationClient.setLocationListener(this);//設置定位回調監聽mlocationClient.setLocationOption(mLocationOption);//設置定位參數mlocationClient.startLocation();//啟動定位} catch (Exception e) {throw new RuntimeException(e);}}}
  1. deactivate中實現停止定位。
    /*** 停止定位*/@Overridepublic void deactivate() {mListener = null;if (mlocationClient != null) {mlocationClient.stopLocation();mlocationClient.onDestroy();}mlocationClient = null;}
  1. onLocationChanged中監聽定位回調。
    private boolean isFirstLoc = true;//判斷是否第一次定位private LatLng currentLatLng;//當前定位/*** 監聽定位回調* @param aMapLocation*/@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (mListener != null && aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {//定位成功回調信息,設置相關消息aMapLocation.getLocationType();//獲取當前定位結果來源,如網絡定位結果,詳見官方定位類型表aMapLocation.getLatitude();//獲取緯度aMapLocation.getLongitude();//獲取經度aMapLocation.getAccuracy();//獲取精度信息SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(aMapLocation.getTime());df.format(date);//定位時間aMapLocation.getAddress();//地址,如果option中設置isNeedAddress為false,則沒有此結果,網絡定位結果中會有地址信息,GPS定位不返回地址信息。aMapLocation.getCountry();//國家信息aMapLocation.getProvince();//省信息aMapLocation.getCity();//城市信息aMapLocation.getDistrict();//城區信息aMapLocation.getStreet();//街道信息aMapLocation.getStreetNum();//街道門牌號信息aMapLocation.getCityCode();//城市編碼aMapLocation.getAdCode();//地區編碼// 是否第一次定位if (isFirstLoc) {aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//設置縮放級別currentLatLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()); //獲取當前定位aMap.moveCamera(CameraUpdateFactory.changeLatLng(currentLatLng));//移動到定位點//點擊定位按鈕 能夠將地圖的中心移動到定位點mListener.onLocationChanged(aMapLocation);isFirstLoc = false;}} else {//顯示錯誤信息Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}

**注意:**檢查是否開啟了應用定位權限和高精度定位

?完整代碼

MainActivity類:

package com.st.demo;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.MapsInitializer;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MyLocationStyle;
import java.text.SimpleDateFormat;
import java.util.Date;public class  MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener {private MapView mMapView;//聲明一個地圖視圖對象private AMap aMap;//聲明一個地圖圖層private OnLocationChangedListener mListener;//聲明位置監聽private AMapLocationClient mlocationClient;//聲明定位客戶端private AMapLocationClientOption mLocationOption;//聲明定位參數配置選項private boolean isFirstLoc = true;//判斷是否第一次定位private LatLng currentLatLng;//當前定位@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化地圖定位initMap(savedInstanceState);}/*** 初始化地圖* @param savedInstanceState*/private void initMap(Bundle savedInstanceState) {//隱私合規接口MapsInitializer.updatePrivacyShow(this, true, true);MapsInitializer.updatePrivacyAgree(this, true);AMapLocationClient.updatePrivacyAgree(this, true);AMapLocationClient.updatePrivacyShow(this, true, true);//獲取地圖視圖對象mMapView = findViewById(R.id.map);//創建地圖mMapView.onCreate(savedInstanceState);if (aMap == null) {aMap = mMapView.getMap();}//設置了定位的監聽aMap.setLocationSource(this);//初始化定位藍點樣式類MyLocationStyle myLocationStyle;myLocationStyle = new MyLocationStyle();myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//設置定位模式myLocationStyle.interval(2000); //只在連續定位模式下生效myLocationStyle.showMyLocation(true);//設置是否顯示定位小藍點// 將定位藍點移動到屏幕中心myLocationStyle.anchor(0.5f, 0.5f).myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);aMap.setMyLocationStyle(myLocationStyle);aMap.setMyLocationEnabled(true);// 是否啟動顯示定位藍點,默認是false。}/*** 激活定位*/@Overridepublic void activate(LocationSource.OnLocationChangedListener listener) {mListener = listener;if (mlocationClient == null) {//初始化定位try {mLocationOption = new AMapLocationClientOption();//初始化定位參數mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//設置為高精度定位模式mlocationClient = new AMapLocationClient(this);//聲明定位客戶端mlocationClient.setLocationListener(this);//設置定位回調監聽mlocationClient.setLocationOption(mLocationOption);//設置定位參數mlocationClient.startLocation();//啟動定位} catch (Exception e) {throw new RuntimeException(e);}}}/*** 停止定位*/@Overridepublic void deactivate() {mListener = null;if (mlocationClient != null) {mlocationClient.stopLocation();mlocationClient.onDestroy();}mlocationClient = null;}/*** 監聽定位回調* @param aMapLocation*/@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (mListener != null && aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {//定位成功回調信息,設置相關消息aMapLocation.getLocationType();//獲取當前定位結果來源,如網絡定位結果,詳見官方定位類型表aMapLocation.getLatitude();//獲取緯度aMapLocation.getLongitude();//獲取經度aMapLocation.getAccuracy();//獲取精度信息SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(aMapLocation.getTime());df.format(date);//定位時間aMapLocation.getAddress();//地址,如果option中設置isNeedAddress為false,則沒有此結果,網絡定位結果中會有地址信息,GPS定位不返回地址信息。aMapLocation.getCountry();//國家信息aMapLocation.getProvince();//省信息aMapLocation.getCity();//城市信息aMapLocation.getDistrict();//城區信息aMapLocation.getStreet();//街道信息aMapLocation.getStreetNum();//街道門牌號信息aMapLocation.getCityCode();//城市編碼aMapLocation.getAdCode();//地區編碼// 是否第一次定位if (isFirstLoc) {aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//設置縮放級別currentLatLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()); //獲取當前定位aMap.moveCamera(CameraUpdateFactory.changeLatLng(currentLatLng));//移動到定位點//點擊定位按鈕 能夠將地圖的中心移動到定位點mListener.onLocationChanged(aMapLocation);isFirstLoc = false;}} else {//顯示錯誤信息Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}/*** 生命周期-onDestroy*/@Overrideprotected void onDestroy() {super.onDestroy();mMapView.onDestroy(); //銷毀地圖}/*** 生命周期-onResume*/@Overrideprotected void onResume() {super.onResume();mMapView.onResume(); //重新繪制加載地圖}/*** 生命周期-onPause*/@Overrideprotected void onPause() {super.onPause();mMapView.onPause();//暫停地圖的繪制}/*** 生命周期-onSaveInstanceState*/@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);//保存地圖當前的狀態}
}

activity_main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"></com.amap.api.maps.MapView></LinearLayout>

AndroidManifest.xml中的權限相關省略,參考上面的。


在這里插入圖片描述

?第1,2章 Android搭建3D高德地圖詳細教
?第 3 章 初始化定位并顯示小藍點
?第 4 章Android高德地圖繪制標記點Marker
?第 5 章Android高德地圖控件交互詳細介紹

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697311.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPS游戲之漫談截幀技術

什么是截幀技術 簡而言之就是截取當前屏幕的內容&#xff0c;然后一般是以圖片的形式存入本地 為什么需要這個技術 因為有需求 比如我們需要把我牛逼的戰績炫耀下&#xff0c;是不是以圖文的形式分享到朋友圈是不是最直觀&#xff1f;&#xff1f;&#xff1f; 在Unity引擎中…

Aigtek高壓放大器是什么東西做的

在許多電子應用中&#xff0c;需要將低電壓信號放大到較高電壓以滿足特定的需求。為了實現這個目標&#xff0c;高壓放大器被廣泛采用。高壓放大器是一種專用電子設備&#xff0c;使用特定的電路和器件來增益輸入信號的電壓。它通常由以下幾個主要組成部分構成。 電源供應 高壓…

Linux編譯器---gcc/g++使用詳解

目錄 前言 gcc/g介紹 gcc/g的編譯指令&#xff08;以gcc為例&#xff09; ?編輯 gcc選項 預處理(進行宏替換) 編譯&#xff08;生成匯編&#xff09; 匯編&#xff08;生成機器可識別代碼&#xff09; 鏈接&#xff08;生成可執行文件或庫文件&#xff09; 函數庫 概念 …

網絡金融治理模式下第三方支付風險與應對路徑

隨著經濟社會的高速發展&#xff0c;消費模式日益多樣化&#xff0c;其中&#xff0c;第三方支付作為一種便捷的消費支付模式&#xff0c;在順應時代發展潮流中應運而生。這種支付模式通過中國人民銀行批準&#xff0c;持有《支付業務許可證》&#xff0c;并與銀行簽約&#xf…

訓練yolov8+SAM的過程記錄

1-首先將拿到的數據集進行重新命名(dataset1:是經過校色之后裁剪的圖片;dataset2:原圖) 圖片文件從1.jpg開始命名的代碼: folder_path = rC:\Users\23608\Desktop\Luli_work\data\fanStudent\tongueseg\Fan\Fan\.jpg new_folder = rC:\Users\23608\Desktop\Luli_work\da…

stable diffusion官方版本復現

踩了一些坑&#xff0c;來記錄下 環境 CentOS Linux release 7.5.1804 (Core) 服務器RTX 3090 復現流程 按照Stable Diffusion的readme下載模型權重、我下載的是stable-diffusion-v1-4 版本的 1 因為服務器沒法上huggingface&#xff0c;所以得把權重下載到本地&#xff…

初識表及什么是數據表

一、了解表 1.1.概述 表是處理數據和建立關系型數據庫及應用程序的基本單元&#xff0c;是構成數據庫的基本元素之一&#xff0c;是數據庫中數據組織并儲存的單元&#xff0c;所有的數據都能以表格的形式組織&#xff0c;目的是可讀性強。 1.2.表結構簡述 一個表中包括行和列…

當項目經理的一定要考PMP嘛?

PMP資格認證并不是強制性要求&#xff0c;但強烈建議考慮獲取該資格&#xff01;首先讓我們來了解一下PMP是什么&#xff0c;然后再談談為什么建議考取PMP資格的理由。 PMP&#xff08;Project Management Professional&#xff09;是項目管理專業人員的資格認證。該認證由全球…

SCI一區 | Matlab實現GAF-PCNN-MSA格拉姆角場和雙通道PCNN融合注意力機制的多特征分類預測

SCI一區 | Matlab實現GAF-PCNN-MSA格拉姆角場和雙通道PCNN融合注意力機制的多特征分類預測 目錄 SCI一區 | Matlab實現GAF-PCNN-MSA格拉姆角場和雙通道PCNN融合注意力機制的多特征分類預測效果一覽基本介紹模型描述程序設計參考資料 效果一覽 基本介紹 1.【SCI一區級】Matlab實…

老子云3D資源服務與應用平臺詳解

老子云平臺定位 老子云目標客群 老子云平臺架構 老子云平臺價值 核心優勢 -AMRT標準格式 -自動模型輕量化 -持續精進的底層技術算法 -千萬級輕量化3D資源素材市場 功能服務 -格式轉換 -蒙皮動畫輕量化 -傾斜攝影輕量化 -效果編輯器 -應用編輯器 -3D OFD應用 -A3D PPT -3D資源…

力扣日記2.22-【回溯算法篇】47. 全排列 II

力扣日記&#xff1a;【回溯算法篇】47. 全排列 II 日期&#xff1a;2023.2.22 參考&#xff1a;代碼隨想錄、力扣 47. 全排列 II 題目描述 難度&#xff1a;中等 給定一個可包含重復數字的序列 nums &#xff0c;按任意順序 返回所有不重復的全排列。 示例 1&#xff1a; 輸…

SpringBoot中定義了Bean,但是為什么依賴注入的時候注入不了

背景&#xff1a; 擴展RedisTemplate的實現的時候寫了這樣一段代碼&#xff1a; public class BusinessRedisTemplate extends RedisTemplate<String, String> {private final String prefix "business";public BusinessRedisTemplate (RedisConnectionFact…

十八、圖像像素類型轉換和歸一化操作

項目功能實現&#xff1a;對一張圖像進行類型轉換和歸一化操作 按照之前的博文結構來&#xff0c;這里就不在贅述了 一、頭文件 norm.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class NORM { public:void norm(Mat& image); };#pragma once二…

智慧公廁是什么?智慧公廁是構建智慧城市的環境衛生基石

隨著城市化進程的不斷加速&#xff0c;城市人口密度和流動性也逐漸增大&#xff0c;對城市公共設施的需求與日俱增。而在這些公共設施中&#xff0c;公廁作為城市基礎設施中不可或缺的一環&#xff0c;對城市的環境衛生和市民生活質量起著舉足輕重的作用。如何提高公廁的管理效…

android studio 中使用kotlin語言 直接操作布局id

android studio 中使用kotlin語言 直接操作布局id 需要在 build.gradle 文件 引入 apply plugin: kotlin-android apply plugin: kotlin-android-extensions&#xff08;會自動生成&#xff0c;可忽略&#xff09;然后在 Activity 文件中 引入 對應的 layout 文件 如&#xff…

MacOs 圍爐夜話

文章目錄 一、安裝 Mac 一、安裝 Mac macOS是一套由蘋果開發的運行于Macintosh系列電腦上的操作系統。macOS是首個在商用領域成功的圖形用戶界面操作系統。 VM虛擬機怎么安裝mac os&#xff1f;&#xff08;全教程&#xff09; 虛擬機&#xff1a;VMware Workstation 17 pro W…

新書推薦:《分布式商業生態戰略:未來數字商業新邏輯與企業數字化轉型新策略》

近兩年&#xff0c;商業經濟環境的不確定性越來越明顯&#xff0c;市場經濟受到疫情、技術、政策等多方因素影響越來越難以預測&#xff0c;黑天鵝事件時有發生。在國內外經濟方面&#xff0c;國際的地緣政治對商業經濟產生著重大的影響&#xff0c;例如供應鏈中斷&#xff0c;…

Shopify配置項過多如何在代碼層面簡化輸出內容

在處理 Shopify 的配置項過多的情況下&#xff0c;可以通過在代碼層面簡化輸出內容來提高效率和可維護性。以下是一些方法&#xff1a; 1. 使用循環和條件語句 使用循環和條件語句來動態生成和輸出內容。通過遍歷配置項的列表或對象&#xff0c;可以根據條件決定是否輸出相應的…

Backend - Django SimpleUI(美化 Django Admin )

目錄 一、作用 二、安裝 & 配置 &#xff08;一&#xff09;安裝依賴 &#xff08;二&#xff09;配置 &#xff08;三&#xff09;運行 三、基礎設定 &#xff08;一&#xff09;創建用戶 &#xff08;二&#xff09;設置標題 &#xff08;三&#xff09;設置登錄…

代理模式筆記

代理模式 代理模式代理模式的應用場景先理解什么是代理&#xff0c;再理解動靜態舉例舉例所用代碼 動靜態的區別靜態代理動態代理 動態代理的優點代理模式與裝飾者模式的區別 代理模式 代理模式在設計模式中是7種結構型模式中的一種&#xff0c;而代理模式有分動態代理&#x…