最近一直在学习android,学到地图这里,遇到的坑也不少,所以就把它分享出来,一和大家一起学习,二为以后写项目看,
一.获取key
1.创建应用
首先,您得上(高德地图开放平台官网)注册一个账号,当然,如果有了就直接登录。
其次,就是在应用管理中,创建一个应用,当然如果您之前已经创建了就跳过(下面我是已经创建过)
2.添加key
在创建的应用上点击"添加"按钮,在弹出的对话框中,依次输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码 SHA1、调试版安全码 SHA1(可忽略)、以及 Package,如下图所示:
需要注意的是: 1个KEY只能用于一个应用(多渠道安装包属于多个应用),1个Key在多个应用上使用会出现服务调用失败。
然后勾选协议,点击“提交”,完成 Key 的申请,此时您可以在所创建的应用下面看到刚申请的 Key 了。
然后到这里,肯定有人问,如何去获取SHA1和包名呢,下面就来说下如何获取:
1.1 获取SHA1码
下面方法是通过Android Studio获取SHA1的
-
第一步:使用 WIN+R 快捷键,并输入cmd打开控制台工具
-
第二步:输入命令:keytool -v -list -keystore keystore文件路径。
输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取 Sha1 值,如下图所示:
1.2 获取package名
直接在android项目的build.gradle下面的
二.android studio配置工程
1. 添加jar包
在Anroid地图SDK相关下载中下载AAR包
将下载的地图 SDK 的 jar包复制到工程的 libs 目录下
2.添加so库
- 首先下载so库
-
在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。如图所示:
-
在build.gradle中配置
3.1. 在Project的build.gradle文件中配置repositories,添加maven或jcenter仓库地址
Android Studio默认会在Project的build.gradle为所有module自动添加jcenter的仓库地址,如果已存在,则不需要重复添加(我这个是自动生成的,不需再配置)
3.2.主工程的build.gradle文件在Project目录中位置:
三.创建地图
在创建地图之前,还需配置一些权限(在清单文件中配置)
1. 权限声明
2. 设置高德key
在application里面设置
3.创建地图
MapView 是 AndroidView 类的一个子类, 用于在 Android View 中放置地图。 MapView 是地图容器。用 MapView 加载地图的方法与 Android 提供的其他 View 一样,具体的使用步骤如下:
1. 首先在布局xml文件中添加地图控件:
<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"/></LinearLayout>
2.java文件
amapView = findViewById(R.id.map); //获取地图控件
amapView.onCreate(savedInstanceState); // 通过onCreate( )方法创建地图
public class MainActivity extends AppCompatActivity {private MapView amapView;private AMap aMap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);amapView = findViewById(R.id.map);amapView.onCreate(savedInstanceState); // 1. 创建地图}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图amapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图amapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制amapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态amapView.onSaveInstanceState(outState);}
}
到这一步时,地图是可以显示出来了,只是它不拥有其他比如定位,缩放等功能,如下:
四.定位蓝点(在Activity生命周期onCreate()中执行)
AMap 类是地图的控制器类,用来操作地图。它所承载的工作包括:地图图层切换(如卫星图、黑夜地图)、改变地图状态(地图旋转角度、俯仰角、中心点坐标和缩放级别)、添加点标记(Marker)、绘制几何图形(Polyline、Polygon、Circle)、各类事件监听(点击、手势等)等,AMap 是地图 SDK 最重要的核心类,诸多操作都依赖它完成。
1.初始话AMap对象
先创建个全局对象
private AMap aMap;
然后判断其是否为null,是的就执行下面这段代码
if(aMap == null){aMap = amapView.getMap();}
2. 实现定位蓝点
// 3.实现定位蓝点(显示当前位置)MyLocationStyle myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类//连续定位模式、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。// (1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);myLocationStyle.interval(2000); //连续定位模式下的定位间隔(只在连续模式下生效)aMap.setMyLocationStyle(myLocationStyle);aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。aMap.setMyLocationEnabled(true);//true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
通过上面的简单配置后,得到的效果如下所示:
但还要注意点:到这步的时候得检查手机有没有打开GPS功能,还要通过手机设置找到这个app并开启手机定位权限,要重要的就是还要看看有没有在清单文件中设置了下面权限(有时就会弄漏)
<!-- 获取GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />