sq_Hayden's blog

高德地图开发(环境搭建及地图显示)

2018/05/26 Share

Android高德地图开发

  • 引言:本篇博客将主要描述Android Studio开发高德地图过程的前期,如何搭建好环境以及其中一些棘手的点,至于具体的详细过程,可参见高德官网的详细教程点击这里。好了,接下来就让我们进入到高德地图的开发中吧。

1.环境的搭建(Android Studio)

1.key值获取

  在高德地图官网注册好账号之后(这方面不用多说了吧>△<),接下来我们依次进入个人中心>应用管理>创建新应用,此时如下所示:
  

map

  要成功的申请到所需要的Key值,我们需要去仔细的填写我所标记的这三点内容。那么,如何才能得到呢?


  (1)(2)调试版及发布版本的安全码SHA1:
  在我们的android studio中,打开我们的项目,将其进行打包,此时需要注意的地方:要将其打包两次,分别新建debug.jks,选择Debug版本进行打包,以及新建release.jks,同时选择Release版本进行打包,最终会生成两个.jks文件,然后我们就可以查询本项目对应的各自版本的SHA1值了。
    

map

  在这里建议将其打包在项目路径下,方便后边进行查找。下边是打包好之后所生成的两个.jks文件。
    
map

  接下来我们利用一条命令去查询一下本项目对应的发布版SHA1值以及调试版SHA1值,命令如下所示(要在对应的key.jks所在路径下执行查询的相关命令):
  keytool -list -v -keystore debug.jks(查询debug版)以及keytool -list -v -keystore release.jks(查询release版)
    
map

  (3)包名
  这里的包名不可以乱填,必须是项目路径下所创建的,需要用到地图相关功能的包的包名。
  打开 Android 项目的 AndroidManifest.xml 配置文件,package 属性所对应的内容为应用包名,也请检查 build.gradle 文件的 applicationid 属性是否与上文提到的 package 属性一致,如果不一致会导致INVALID_USER_SCODE,请调整一致。


  到了这里,就可以成功的拿到项目对应的key值了。

2.导包及添加.so文件

  拿到key值后,我们就开始进入到资源的准备工作。首先是导入地图相关的包,放入libs目录下。
  

map

  接着就是添加.so文件,在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。如图所示:
  
map

  此时有一个需要着重注意的地方,就是我们得保证在jniLibs下的每种版本,其内部对应的.so文件数量和种类必须是一样的,不然的话,会报错找不到资源。

3.配置所需权限以及key、服务相关

  在完成了上述的操作之后,接下来就是配置一些地图相关的东西了。
  首先是地图所需要的相关权限,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//地图包及导航包所需要的权限
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序改变WIFI的网络连接状态>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--允许程序通过精准的GPS定位来获取用户的位置信息>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--允许程序修改当前设置,如本地化-->
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
<!--允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>

  相关的服务(为了保证导航功能的正确使用,需在 AndroidManifest.xml 中配置定位 service 组件。)

<!-- 地图相关的文件 -->
     //key赋值相关
     <meta-data
         android:name="com.amap.api.v2.apikey"
         android:value="这里输入在第一步时获取到的key值" />
    //导航服务相关
     <service android:name="com.amap.api.location.APSService" />

  接下来要说的一点非常的重要,我在当时配置完成上述操作后,因为这个花费了一下午的时间,那就是当我们生成了两个.jks文件后(debug.jks及release.jks),一定要在项目的build.gradle中将我们所生成的debug.jks进行引用,否则会报key值无效的错误,导致地图无法正常显示。
  配置如下:

   android {
     //在这里进行配置
    signingConfigs {
        config{
        //debug生成key时定义的(默认是key0)
            keyAlias 'key0'
            //定义时设置的密码
            keyPassword 'xxxxxxx'
            storeFile file('这里要写dubug.jks所在的全路径(../../debug.jks)')
            //定义是设置的密码
            storePassword 'xxxxxx'
        }
    }
    compileSdkVersion 26
    defaultConfig {
        applicationId "shaoqi.gaodedemo"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        //添加对Debug的引用
        debug {
            //设置引用
            signingConfig signingConfigs.config
        }
    }
}

 到了这里,我们的配置工作就告一段落了。接下来就让高德地图显示在我们的页面里边!

2.代码相关

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">
 //地图组件
 <com.amap.api.maps.MapView
     android:id="@+id/map"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>
</LinearLayout>

2.代码

   public class MainActivity extends Activity {
      MapView mMapView = null;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);
      }

      @Override
      protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
      }

        @Override
      protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
      }

      @Override
      protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
      } 

      @Override
      protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
      }
}

 现在,就一起来看看最终实现的效果:
 

map

  好了,对于高德地图,就先总结到这里,后边会进行地图定位及导航方面的一些定制功能开发。

CATALOG
  1. 1. Android高德地图开发
    1. 1.1. 1.环境的搭建(Android Studio)
      1. 1.1.1. 1.key值获取
      2. 1.1.2. 2.导包及添加.so文件
      3. 1.1.3. 3.配置所需权限以及key、服务相关
    2. 1.2. 2.代码相关
      1. 1.2.1. 1.xml文件
      2. 1.2.2. 2.代码