从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航首先找到自己的 debug keystore 位置 一般在 C 盘下的用户目录内 C Users 自己的用户名 android debug keystore

大家好,欢迎来到IT知识分享网。

一、获取高德KEY

首先进入高德控制台,在我的应用中点击”添加key”,如下图所示:

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

其中需要填写的发布版SHA1、调试版SHA1和PackageName获取方式如下:

1.发布版SHA1:

首先需要创建自己项目的发布版SHA1:在Android Studio中build下面点击“Generate Signed Bundle or APK, 选择APK,点击next:

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

选择Creat new…来创建key,选择好存放目录,并设置密码。next后选择release,点击Finish完成创建

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

然后找到自己电脑的jdk安装目录,进入./bin文件夹,其中会有keytool.exe,在./bin文件夹中右键鼠标,点击在终端中打开,输入下面“bin>”后面的代码:

E:\java\bin> ./keytool.exe -list -v -keystore D:\自己的key保存目录\自己的key命名.jks 

然后输入前面设置的密码,成功获得发布版SHA1。

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

2.调试版SHA1:

 首先找到自己的debug.keystore位置,一般在C盘下的用户目录内:C:\Users\自己的用户名\.android\debug.keystore。

再找到自己电脑的jdk安装目录,进入./bin文件夹,其中会有keytool.exe,在./bin文件夹中右键鼠标,点击在终端中打开,输入下面“bin>”后面的代码:

E:\java\bin> .\keytool.exe -list -v -keystore C:\Users\自己的用户名\.android\debug.keystore 

然后输入密码,默认密码为:android,成功获得调试版SHA1。

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

3.PackageName:

这个在自己的项目中的AndroidManifest.xml获取: package = “所需要的PackageName”

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

完成上述三步后就得到了高德地图的KEY

从零开始的Android Studio + 高德地图SDK实现地图定位 + 导航

二、相关变量定义(随着更新丰富)

在java文件目录的实现类Activity中粘贴

 private MapView mMapView = null; private AMap aMap = null; private LatLng latLng_me = null; private boolean firstOpen = true;

三、创建地图

 1.应用高德KEY

在AndroidManifest.xml中<application>标签里面粘贴:

<meta-data android:name="com.amap.api.v2.apikey" android:value="获取的高德KEY"/>

2.申请权限

在AndroidManifest.xml中<application>标签外面粘贴:(方便起见我把后面会用到的所有权限全部给出)

 <!--允许访问网络,必选权限--> <uses-permission android:name="android.permission.INTERNET" /> <!--允许获取粗略位置,若用GPS实现定位小蓝点功能则必选--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允许获取wifi网络信息,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允许获取wifi状态改变,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!--允许写入扩展存储,用于数据缓存,若无此权限则写到私有目录--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许读设备等信息,用于问题排查--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明--> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <!--用与导航状态中保持屏幕常亮--> <uses-permission android:name="android.permission.WAKE_LOCK"/>

3.创建地图layout

在布局文件activity_layout.xml中粘贴:

<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>

4.实现地图生命周期

在实现类Activity中粘贴

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); //隐私合规接口 MapsInitializer.updatePrivacyShow(getApplicationContext(), true, true); MapsInitializer.updatePrivacyAgree(getApplicationContext(), true); //基础库设置允许采集个人及设备信息 AMapUtilCoreApi.setCollectInfoEnable(true); //创建地图 mMapView = (MapView) findViewById(R.id.map); mMapView.onCreate(savedInstanceState); @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); }

然后运行即可完成创建地图。

四、实现定位

1.动态权限申请(android系统太安全了)

对于现在版本的android,我们需要在实现类Activity中实现启动app时再次申请所需要的权限,在进行定位之前位置粘贴:

 //检查权限是否允许(动态申请权限) List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.INTERNET); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_NETWORK_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_WIFI_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.CHANGE_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.CHANGE_WIFI_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION); } if (ContextCompat.checkSelfPermission(MapActivity_fast.this, Manifest.permission.WAKE_LOCK) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WAKE_LOCK); } if (!permissionList.isEmpty()) { String[] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MapActivity_fast.this, permissions, 1); }

2.进行定位 

 //初始化地图控制器对象 aMap = mMapView.getMap(); aMap.setTrafficEnabled(true);// 显示实时交通状况 aMap.getUiSettings().setZoomControlsEnabled(false);//设置地图缩放按钮不显示 aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//设置初始缩放大小 //实现定位监听器 aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(Location location) { //这里返回定位的经纬度 latLng_me = new LatLng(location.getLatitude(), location.getLongitude()); //这里在第一次打开时将地图位置自动定位到自己所在处 if(firstOpen) { aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng_me)); firstOpen = false; } } }); //初始化定位蓝点样式类 MyLocationStyle myLocationStyle = new MyLocationStyle(); //连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER); //设置连续定位模式下的定位间隔,只在连续定位模式下生效, 单次定位模式下不会生效。单位为毫秒。 myLocationStyle.interval(3000); aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮显示 aMap.setMyLocationEnabled(true);// 设置启动显示定位蓝点

然后运行即可实现定位。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120442.html

(0)
上一篇 2025-10-29 18:20
下一篇 2025-10-29 18:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信