【高德地图】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.hqwc.cn/news/485366.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了!!!

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了&#xff01;&#xff01;&#xff01;金航标kinghelm&#xff08;www.kinghelm.com.cn&#xff09;总部位于中国深圳市&#xff0c;兼顾技术、成本、管理、效率和可持续发展。东莞塘厦实验室全电波暗室、网络分析…

Vue响应式状态ref()与reactive()

1. ref()声明响应式状态 <template><!--在DOM元素调用变量时,不需要指定输出变量的value,因为Vue会帮你输出.value但是注意,这个帮助只会帮助顶级的ref属性才会被解包--><div>{{ count }}</div><div>{{ object }}</div><div>{{ arr…

备份恢复指定数据库

mysqldump -uroot -p密码 数据库名 > 备份名_bak.sql 执行命令&#xff0c;在C:\Users\Administrator找到文件 在新库上执行SQL语句

【Oracle】玩转Oracle数据库(四):SQL语言

前言 嘿&#xff0c;各位数据达人们&#xff01;准备好迎接新的挑战了吗&#xff1f;今天&#xff0c;我们要探索的是数据库世界的魔法咒语——SQL语言&#xff01;&#x1f52e;&#x1f4bb; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;四&#xff09;&#xff1a;SQL…

史上最全网络安全术语汇总

整理了一份网络安全词汇术语解释&#xff0c;这是一份在关键时刻能救命的文档。 以前被当做vip会员资料给会员的&#xff0c;现在限时免费分享给大家&#xff0c;有需要的朋友可以下载收藏。分享过期后也不要再跟波哥要了哈&#xff01; 部分内容截选&#xff1a; 网络安全通…

Elastic Search:构建语义搜索体验

当你逐步熟悉 Elastic 时&#xff0c;你将使用 Elasticsearch Relevance Engine™ (ESRE)&#xff0c;该引擎旨在为 AI 搜索应用程序提供支持。 借助 ESRE&#xff0c;你可以利用一套开发人员工具&#xff0c;包括 Elastic 的文本搜索、向量数据库和我们用于语义搜索的专有转换…

https://registry.npm.taobao.org淘宝npm镜像仓库地址更新

在工作中有遇见获取淘宝的npm镜像存在问题&#xff0c;图示如下的报错&#xff1a; 根据报错的内容是说 https://registry.npm.taobao.org地址访问失败了&#xff0c;然后通过排查发现淘宝的npm镜像仓库地址有更新了。需要使用最新的地址 旧的淘宝镜像仓库&#xff1a;https://…

全国各省建成区绿化覆盖率数据集(2006-2021年)

时间范围&#xff1a;2006-2021年 参考文献&#xff1a; [1] 吕桁宇, 马春爱, 汤桐, 郝馥莹. 环境规制、技术创新与工业企业能源强度[J]. 统计与决策, 2023, 39 (10): 59-64. [2] 李思慧, 徐保昌. 环境规制与技术创新——来自中国地级市层面的经验证据[J]. 现代经济探讨, 20…

移动硬盘误删的文件还能找回来吗?1分钟弄清答案!

“想问问大家如果移动硬盘里保存了很多文件&#xff0c;但上次使用时不小心将部分文件删除了&#xff0c;还有机会找回误删的文件吗&#xff1f;应该怎么进行误删文件的恢复呢&#xff1f;” 在数字化时代&#xff0c;移动硬盘成为了我们存储和传输数据的重要工具。然而&#x…

编程学习线上提问现场解答流程,零基础学编程从入门到精通

编程学习线上提问现场解答流程 一、前言 之前给大家分享的一款中文编程工具&#xff0c;越来越多的学员使用这个工具学习编程。 在学习中有疑难问题寻求解答流程 1、可以在本平台留言或发私信联系老师 2、可以在群提问及时解答问题 3、通过线上会议的方式&#xff0c;电脑…

基于自动化工具autox.js的抢票(猫眼)

1.看到朋友圈抢周杰伦、林俊杰演唱会票贼难信息&#xff0c;特研究了一段时间&#xff0c;用autox.js写了自动化抢票脚本&#xff0c;购票页面自动点击下单&#xff08;仅限安卓手机&#xff09;。 2.脚本运行图 3.前期准备工作 &#xff08;1&#xff09;autox.js社区官网&am…

ChatGPT回答模式

你发现了吗&#xff0c;ChatGPT的回答总是遵循这些类型方式。 目录 1.解释模式 2.类比模式 3.列举模式 4.限制模式 5.转换模式 6.增改模式 7.对比模式 8.翻译模式 9.模拟模式 10.推理模式 1.解释模式 ChatGPT 在回答问题或提供信息时&#xff0c;不仅仅给出…