Android Studio 高德地图开发(一)显示地图

1,643 阅读3分钟

注册高德开发平台账号

听说百度地图定位精准、路线规划科学、图层显示清晰,那就选高德地图吧。

注册账号

这一步不用说了吧,我奶奶都会收短信验证码

获取key

在android studio中打开控制台(terminal)
首先进入jre中的bin目录

image.png 然后输入keytool -v -list -keystore C:\Users\86132\.android\debug.keystore
(记得更换为你自己的debug.keystore路径,默认在用户文件夹中的.android文件夹下) \

然后输入密码,默认为android,即可获得如图所示的SHA1码 屏幕截图 2022-04-13 161051.jpg

打开高德开发平台,注册账户后进入我的应用创建应用,点编辑出现如图所示界面

image.png key名称随意
服务平台选择Android平台
发布版安全吗SHA1和调试版安全码SHA1输入刚才终端得到的即可
PackageName就是你的包名

image.png

提交后我们即可获得一个key
具体作用好像是用于定位用的,其他我也不太清楚
到这里我们的获取key就完成了

导入高德SDK包

下载

相关下载-Android 地图SDK | 高德地图API (amap.com)
高德官网下载地图SDK,方便起见我们下载这个定制版,这样会整合成一个jar包

image.png 下载完成解压后会出现以下文件

image.png

配置jar包

然后打开AndroidStudio,新建一个空项目,我这里命名为Gmap 将刚才解压的jar包复制到app\libs,并选择Add as Library

image.png

配置so文件

在app\src\main中新建一个jinLibs文件夹,并将armeabi文件夹复制进去

image.png

打开app的build.gradle文件,在android标签下加入

sourceSets {
    main {
        jniLibs.srcDirs = ['libs','src/main/jniLibs']
    }

配置权限

然后打开AndroidManifest.xml文件,在manifest标签下加入下述代码

<!--地图需要的权限-->
<!--允许访问网络,必选权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许写入扩展存储,用于数据缓存,若无此权限则写到私有目录-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许获取wifi网络信息,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许获取设备和运营商信息,用于问题排查和网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许获取粗略位置,若用GPS实现定位小蓝点功能则必选。通过WiFi或移动基站获取粗略定位(误差在30~1500米)-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--用于访问GPS定位。GPS精确定位(精度10米以内)-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--允许获取wifi状态改变,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--这个权限用于允许程序在手机屏幕关闭后后台进程仍然运行-->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--允许写设备缓存,用于问题排查-->
<!--    <uses-permission android:name="android.permission.WRITE_SETTINGS" />-->
<!--允许读设备等信息,用于问题排查-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

在application标签下加入

<meta-data android:name="com.amap.api.v2.apikey"
    android:value="你的key">

将你的key值键入
此时SDK已经导入完成了,来个例子测试一下

测试代码

布局文件activity_main.xml如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</LinearLayout>

MainActivity.java如下

package com.example.gmap;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapOptions;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;

public class MainActivity extends AppCompatActivity {

    private MapView mapView;

    private AMap aMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//填充屏幕的UI

        mapView = (MapView) findViewById(R.id.map_view);//返回xml中定义的视图或组件的ID
        mapView.onCreate(savedInstanceState); //此方法必须重写
        init();
    }

    private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
            UiSettings mUiSettings = aMap.getUiSettings();
            mUiSettings.setCompassEnabled(true);//指南针
            mUiSettings.setScaleControlsEnabled(true);//比例尺
            mUiSettings.setZoomControlsEnabled(true);//缩放控件
            /**
            *可通过mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM)调整缩放控件位置
            **/
            mUiSettings.setAllGesturesEnabled (true);//所有手势的开关
            /**
             * mUiSettings.setScrollGesturesEnabled(false);滑动
             * mUiSettings.setZoomGesturesEnabled(false);缩放
             * mUiSettings.setTiltGesturesEnabled(false);倾斜
             * mUiSettings.setRotateGesturesEnabled(false);旋转
             */
        }
        // TODO
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }
}

运行结果如图所示

image.png

笔者心路历程总结

万事开头难,我在配置时遇到了各种问题,也查询了各种解决办法,最后总算是让地图显示在我的虚拟机上了

如果你也遇到了类似问题,不妨参考一下
1、提示不存在keytool命令
记得进入jre中的bin目录才可运行,keytool是java独带的命令
2、测试代码中提示各种方法不存在
这个一般是jar包没弄好,记得路径是libs并且一定要add as library
3、测试代码显示无问题也可运行但是白屏,不显示地图
so文件的问题,因为Android Studio一些奇奇怪怪的配置,导致不能直接将so文件和jar包一样放在libs目录,最简便的方法就是我上文提到的,在main里面新建jinLibs目录,将so文件复制进去,然后修改build.gradle文件