高德地图开发学习Demo
提供者:sannas
开源项目地址: https://github.com/851151582/NaviLocXf.git
Demo实现地图定位、搜索及导航功能,通过关键字可在地图中进行位置搜索及定位,并使用高德地图中的路径规划实现路径的自动规划,接入讯飞语音合成API实现自动语音导航提示。
一、创建工程
1.本地创建工程
(1)官网下载 SDK ( jar 包),将 jar 包引入 AS 创建工程中的 libs 目录,同时在 app 下的 build.gradle 文件的 dependencies 中配置 compile fileTree(include: ['*.jar'], dir: 'libs') 。
(2)使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可
      
   2.高德开放平台创建应用
(1)在高德开放平台注册并创建自己的应用( http://lbs.amap.com/api )。
(2)为新创建的应用添加新的key
(3)获取SHA1
发布版:
   Cmd窗口中进入 jks 文件保存目录,然后输入命令:
先进入项目目录的文件下,输入
keytool -v -list -keystore 您的.jks
再输入密钥库口令: 创建时的密码
调试版:
  第一步:首先我们找到 debug.store 文件,该文件一般放在 C:\Users\ 用户名 \.android 下
第二步:然后在 androidstudio 的 Terminal 中进入 jdk 的 bin 目录下,并敲一下命令:  keytool -v -list - keystore debug.keystore 文件路径 ( 就是我们第一步找到的目录 )
  第三步:输入秘钥口令 “”android“” ,看到下图就代表成功了 ~ !
3.AndroidManifest.xml文件配置
  在其中的<application></application>标签中加入属性:
<meta-data android:name="com.amap.api.v2.apikey" android:value="您的key">
</meta-data>
声明地图服务:
<service android:name="com.amap.api.location.APSService"></service>
声明地图所必要的权限:

<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
4.接入科大讯飞语音导航
(1)将开发工具包中libs目录下的Msc.jar和armeabi复制到Android工程的libs目录(如果工程无libs目录,请自行创建)中
(2)同时需要在每个jniLibs的子文件下添加对应的libmsc.so文件,文件在导航参考的demo工程中复制,自行下载的sdk文件放入有问题(原因未知)。
(3)加入权限
<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--读取联系人权限,上传联系人需要用到此权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
二、主界面的布局及当前位置的获取
MainActivity实现按钮页面跳转,开启模拟导航、实时导航、开启POI位置搜索功能界面。
1、创建Activity,并设置布局,并添加按钮监听事件,实现导航的切换。
2、启动MainActivity时实现当前位置信息的获取
(1) 初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
(2)设置定位回调监听
mLocationClient.setLocationListener(this);
( 3)设置定位参数,参看官网设置参数说明
mLocationClient.setLocationOption(getDefaultOption());
(4)启动定位
mLocationClient.startLocation();
(5)定位成功后回调的的方法onLocationChanged();
aMapLocation.getErrorCode() == 0; 表明定位成功,通过返回的对象来解析定位信息
(6)可将获得的位置信息通过Intent传给其他Activity使用。
三、POI位置搜索功能的实现
1.布局设计
布局顶部位一矩形搜索框,用户可通过位置地名搜索进行地理检索,并将搜索到的位置展示
在下方的地图上,用户可通过点击获取搜索点的地理位置信息,并以文本框的形式展示在布局的最下方。
2.逻辑实现
(1)地图定位小蓝点位置显示
MyLocationStyle myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,
// 定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
mAmap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
mAmap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
mAmap.getUiSettings().setCompassEnabled(true); //设置指南针用于向 App 端用户展示地图方向,默认不显示
mAmap.getUiSettings().setScaleControlsEnabled(true); //设置比例尺控件。位于地图右下角,可控制其显示与隐藏
mAmap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
(2)输入位置地理搜索
a. 实现输入提示的步骤如下:
继承 InputtipsListener 监听。
构造 InputtipsQuery 对象,通过 InputtipsQuery(java.lang.String keyword, java.lang.String city) 设置搜索条件。
//第二个参数传入null或者“”代表在全国进行检索,否则按照传入的city进行检索
InputtipsQuery inputquery = new InputtipsQuery(input_edittext.getText().toString(),null );
inputquery.setCityLimit(false);//限制在当前城市
构造 Inputtips 对象,并设置监听
Inputtips inputTips = new Inputtips(POISearchActivity.this, inputquery);
inputTips.setInputtipsListener(this);
调用 PoiSearch 的 requestInputtipsAsyn() 方法发送请求。
inputTips.requestInputtipsAsyn();
通过回调接口 onGetInputtips()方法 解析返回的结果,获取输入提示返回的信息,返回结果成功或者失败的响应码。1000为成功,其他为失败。
b. 通过解析搜索返回的结果,将返回的一个或多个地理位置信息用Marker在地图上标注出来,并将地图的中心坐标移动至Marker标记处。
for(Tip tip : list){
mMarker = mAmap.addMarker(new MarkerOptions().position(
new LatLng(tip.getPoint().getLatitude(),tip.getPoint().getLongitude()))
.title(tip.getAddress()).snippet(tip.getDistrict()+"("+tip.getPoiID()+")"));
mMarker.startAnimation();
//将地图的中心坐标移动至marker
//参数依次是:视角调整区域的中心点坐标、希望调整到的缩放级别、
// 俯仰角0°~45°(垂直与地图时为0)、偏航角 0~360° (正北方为0)
CameraUpdate update = CameraUpdateFactory.newCameraPosition(
new CameraPosition(mMarker.getPosition(),18,30,0));
mAmap.moveCamera(update);
}
c. 给Marker设置点击事件,并通过下方的文本框展示当前点击位置的地理信息。
// 定义 Marker 点击事件监听
AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
// marker 对象被点击时回调的接口
// 返回 true 则表示接口已响应事件,否则返回false
@Override
public boolean onMarkerClick(Marker marker) {
//通过回调返回的marker来获取位置信息
return true;
}
};
mAmap.setOnMarkerClickListener(markerClickListener);
d. 点击下方开启文本框,即可开启实时导航,起点为当前位置,终点位置即为点击Marker获取的地理位置。
四、开启导航
1.新建BaseActivity
作为导航的基类,实现AMapNaviListener,AMapNaviViewListener两个接口,并实现其中的未
实现的方法。
2.在BaseActivity中开启讯飞语音合成,并为导航对象设置监听事件。
其中TTSController为工具类实现讯飞语音合成的初始化及接入,此处直接移植高德官网demo中的,也可参看讯飞官网开发文档。
//实例化语音引擎
mTtsManager = TTSController.getInstance(getApplicationContext());
mTtsManager.init();
//添加监听事件
mAMapNavi = AMapNavi.getInstance(getApplicationContext());
mAMapNavi.addAMapNaviListener(this);
mAMapNavi.addAMapNaviListener(mTtsManager);
3.开启实时或模拟导航,子类继承BaseActivity,获取之前传入的起点和终点的位置坐标信息。
(1)在地图初始化成功后回调的接口方法onInitNaviSuccess()中,计算并规划驾车路径。
int strategy = 0;
try {
//再次强调,最后一个参数为true时代表多路径,否则代表单路径
strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
} catch (Exception e) {
e.printStackTrace();
}
mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);
(2)在路径规划成功后,会回调onCalculateRouteSuccess()方法,并在其中开启实时导航或者模拟导航。
mAMapNavi.startNavi(NaviType.GPS); //实时导航
//mAMapNavi.startNavi(NaviType.EMULATOR); //模拟导航
五. demo演示效果

图1. 主界面
图2. 模拟导航界面
图3. POI搜索界面

图4. 搜索结果位置展示

图5. 进入语音实时导航

高德地图开发学习Demo相关推荐

  1. Android高德地图开发详解

    这段时间开发的时候用到了高德地图,对高德地图开发有心得体会,现在分享给大家,对我开发过百度地图的我来说,总体来说高德地图Demo,没有百度讲解的详细 个人更偏向于使用百度地图,但是没办发,项目需要使用 ...

  2. 安卓高德地图开发之引入导航功能

    高德地图导航添加需要添加特定的navi包. 高德地图开发中添加导航功能的简单实现原理是引入自定义起点和终点数据后调用官方给出的demo代码. 首先需要一个baseactivity类,给出代码: pac ...

  3. QT5百度地图开发学习——qt调用JavaScript函数并传参

    文章目录 前言 一.通信桥梁bridge 二.QT与JS相互通信(调用函数) 1.QT调用js函数 前言 在上文<QT5百度地图开发学习--控件提升展示地图>中,我们通过控件提升的方式在同 ...

  4. 高德地图开发(三、地图marker点标记)

    高德地图开发(三.地图marker自定义点标记) 一.默认点标记 二.自定义点标记 一.默认点标记 // 创建一个 Marker 实例:var marker = new AMap.Marker({po ...

  5. 高德地图开发之地图配置及vue上初始化创建地图

     开门见山地说,现如今地图相关的开发业务在工作中越来越常见,目前市面上主流的地图开发还是以百度和高德为主,今天就来讲一下高德地图的配置和在vue上的初始化创建,帮助大家更好更快的了解高德地图开发相关的 ...

  6. 快速掌握Web高德地图开发

    本文章致力于帮助对Web高德地图开发感兴趣的朋友快速掌握开发要领,如果能对屏幕前的您有所助益,我将十分荣幸. 如何快速掌握Web高德地图开发? 要领如下: 一. 首先要知道高德地图本身有提供开放的地图 ...

  7. 高德地图开发(四、点聚合)

    高德地图开发(四.点聚合) 一.设置点聚合 二.点聚合中添加删除标记 三.方法和事件 一.设置点聚合 只截取了部分代码,几个方法都处于一个类中. let markers = []; // 点聚合数组 ...

  8. QT5百度地图开发学习——qt调用输入位置坐标位置进行百度地图定位

    系列文章目录 上一章: QT5百度地图开发学习--JavaScript调用qt函数并传参给qt 文章目录 系列文章目录 前言 一.界面设计 二.槽函数 总结 前言 本文实现输入坐标然后在地图上显示位置 ...

  9. 基于高德地图开发 Web 应用

    文章目录 写在前面 为什么选择高德地图?对比腾讯.百度.OpenLayers OpenLayers 腾讯地图 百度地图 高德地图 基本的开发步骤,开始实现自己的地图应用 快速掌握 API 模块.架构. ...

最新文章

  1. 检测未定义的对象属性
  2. docker环境下solr6.0配置(中文分词+拼音)
  3. windows-DLL注入
  4. 【AutoML】优化方法可以进行自动搜索学习吗?
  5. linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞
  6. vue 父组件 调用 子组件的方法
  7. Java BigDecimal 转换,除法陷阱(转)
  8. Tapestry5之多个方法匹配
  9. java面试准备题目
  10. 云计算核心技术剖析学习笔记_2
  11. 如何搭建一对一直播PHP直播系统源码的流程
  12. 飞鸽传书2007绿色版,提取、识别不同的重点
  13. Autojs抖音小助手抢红包福袋脚本实战分享
  14. JavaBean的前世晋升程序员如何提升领导力
  15. win10桌面频繁刷新
  16. python人像录制加声音_简单易用的录制屏幕与摄像头工具
  17. 全面剖析ESP32创建Wi-Fi热点的过程
  18. 迅雷冻结3亿链克,停止国际版支持,这个区块链项目基本凉了
  19. 12月世界燕窝滋补品展|上海燕博会|冻干(即食)燕窝展谈食用燕窝
  20. 找不到全局编录服务器,将 DC 提升至全局编录服务器时出现问题 - Windows Server | Microsoft Docs...

热门文章

  1. java接口编程题_Java接口练习题
  2. R计算 地理集中指数
  3. 车载通信——J1939故障码
  4. 如何取消Windows server 2016登录密码
  5. jQuery Api 学习(六、jQuery 文档 - 操作文档)
  6. SecoClient 警告:当前服务进程已退出或关闭,请尝试重新安装客户端!
  7. 软件测试读不出硬盘,电脑经常检测不到硬盘怎么办
  8. 统信UOS操作系统 VS 银河麒麟操作系统
  9. 精准营销!用机器学习完成客户分群!
  10. DirectX (9) 纹理映射