本节将要实现的功能是路线导航,确定出发点和到达的终点坐标,两点之间的路线导航。跟前几篇一样,上代码

首先是类文件NaviActivity.java

package com.junto.gdmaptest.navi;import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.Window;
import android.widget.Toast;import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.AMapCalcRouteResult;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapModelCross;
import com.amap.api.navi.model.AMapNaviCameraInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviRouteNotifyData;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AMapServiceAreaInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.autonavi.tbt.TrafficFacilityInfo;
import com.junto.gdmaptest.R;
import com.junto.gdmaptest.util.ErrorInfo;import java.util.ArrayList;
import java.util.List;/*** Created by WangJinyong on 2018/11/7.* 路线导航*/public class NaviActivity extends Activity implements AMapNaviListener,AMapNaviViewListener {protected AMapNaviView mAMapNaviView;protected AMapNavi mAMapNavi;protected NaviLatLng mEndLatlng = new NaviLatLng(40.084894,116.603039);//终点经纬度protected NaviLatLng mStartLatlng = new NaviLatLng(39.825934,116.342972);//起点经纬度protected final List<NaviLatLng> sList = new ArrayList<NaviLatLng>();//起点经纬度集合protected final List<NaviLatLng> eList = new ArrayList<NaviLatLng>();//终点经纬度集合protected List<NaviLatLng> mWayPointList;//途经点经纬度集合@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_navi);mAMapNaviView = findViewById(R.id.navi_view);mAMapNaviView.onCreate(savedInstanceState);mAMapNaviView.setAMapNaviViewListener(this);mAMapNavi = AMapNavi.getInstance(getApplicationContext());mAMapNavi.addAMapNaviListener(this);mAMapNavi.setUseInnerVoice(true);//使用内置语音播报//设置模拟导航的行车速度mAMapNavi.setEmulatorNaviSpeed(75);sList.add(mStartLatlng);eList.add(mEndLatlng);mWayPointList = new ArrayList();mWayPointList.add(new NaviLatLng(39.925846, 116.442765));}@Overrideprotected void onResume() {super.onResume();mAMapNaviView.onResume();}@Overrideprotected void onPause() {super.onPause();mAMapNaviView.onPause();
//        停止导航之后,会触及底层stop,然后就不会再有回调了,但是讯飞当前还是没有说完的半句话还是会说完
//        mAMapNavi.stopNavi();}@Overrideprotected void onDestroy() {super.onDestroy();mAMapNaviView.onDestroy();//since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行mAMapNavi.stopNavi();mAMapNavi.destroy();}//==============================下面是AMapNaviListener实现的方法=========================//@Overridepublic void onInitNaviFailure() {}@Overridepublic void onInitNaviSuccess() {//初始化成功/*** 方法: int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数:** @congestion 躲避拥堵* @avoidhightspeed 不走高速* @cost 避免收费* @hightspeed 高速优先* @multipleroute 多路径**  说明: 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。*  注意: 不走高速与高速优先不能同时为true 高速优先与避免收费不能同时为true*/int strategy = 0;try {//再次强调,最后一个参数为true时代表多路径,否则代表单路径strategy = mAMapNavi.strategyConvert(true, true, true, false, true);} catch (Exception e) {e.printStackTrace();}mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);//起始点坐标、终点坐标、途经点坐标、strategy
//        mAMapNavi.calculateWalkRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//步行导航
//        mAMapNavi.calculateRideRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//骑行导航}@Overridepublic void onCalculateRouteSuccess(int[] ints) {//多路径算路成功回调
//        mAMapNavi.startNavi(NaviType.EMULATOR);//模拟导航mAMapNavi.startNavi(NaviType.GPS);//实时导航}@Overridepublic void onStartNavi(int i) {//开始导航回调}@Overridepublic void onTrafficStatusUpdate() {}@Overridepublic void onLocationChange(AMapNaviLocation aMapNaviLocation) {//当前位置回调}@Overridepublic void onGetNavigationText(int i, String s) {//播报类型和播报文字回调}@Overridepublic void onGetNavigationText(String s) {}@Overridepublic void onEndEmulatorNavi() {//结束模拟导航}@Overridepublic void onArriveDestination() {//到达目的地}@Overridepublic void onCalculateRouteFailure(int errorInfo) {//路线计算失败Log.e("dm", "--------------------------------------------");Log.i("dm", "路线计算失败:错误码=" + errorInfo + ",Error Message= " + ErrorInfo.getError(errorInfo));Log.i("dm", "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/");Log.e("dm", "--------------------------------------------");Toast.makeText(this, "errorInfo:" + errorInfo + ",Message:" + ErrorInfo.getError(errorInfo), Toast.LENGTH_LONG).show();}@Overridepublic void onReCalculateRouteForYaw() {//偏航后重新计算路线回调}@Overridepublic void onReCalculateRouteForTrafficJam() {//拥堵后重新计算路线回调}@Overridepublic void onArrivedWayPoint(int i) {//到达途径点}@Overridepublic void onGpsOpenStatus(boolean b) {//GPS开关状态回调}@Overridepublic void onNaviInfoUpdate(NaviInfo naviInfo) {//导航过程中的信息更新,请看NaviInfo的具体说明}@Overridepublic void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {//过时}@Overridepublic void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {}@Overridepublic void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {}@Overridepublic void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {}@Overridepublic void showCross(AMapNaviCross aMapNaviCross) {//显示转弯回调}@Overridepublic void hideCross() {//隐藏转弯回调}@Overridepublic void showModeCross(AMapModelCross aMapModelCross) {}@Overridepublic void hideModeCross() {}@Overridepublic void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {}@Overridepublic void showLaneInfo(AMapLaneInfo aMapLaneInfo) {//显示车道信息}@Overridepublic void hideLaneInfo() {//隐藏车道信息}@Overridepublic void notifyParallelRoad(int i) {if (i == 0) {Toast.makeText(this, "当前在主辅路过渡", Toast.LENGTH_SHORT).show();Log.d("wlx", "当前在主辅路过渡");return;}if (i == 1) {Toast.makeText(this, "当前在主路", Toast.LENGTH_SHORT).show();Log.d("wlx", "当前在主路");return;}if (i == 2) {Toast.makeText(this, "当前在辅路", Toast.LENGTH_SHORT).show();Log.d("wlx", "当前在辅路");}}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {//已过时}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {//更新交通设施信息}@Overridepublic void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {//已过时}@Overridepublic void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {//更新巡航模式的统计信息}@Overridepublic void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {//更新巡航模式的拥堵信息}@Overridepublic void onPlayRing(int i) {}@Overridepublic void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {}@Overridepublic void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {}@Overridepublic void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {}//============================下面是AMapNaviViewListener实现的方法==================================//@Overridepublic void onNaviSetting() {//底部导航设置点击回调}@Overridepublic void onNaviCancel() {finish();}@Overridepublic boolean onNaviBackClick() {return false;}@Overridepublic void onNaviMapMode(int i) {//地图的模式,锁屏或锁车}@Overridepublic void onNaviTurnClick() {//转弯view的点击回调}@Overridepublic void onNextRoadClick() {//下一个道路View点击回调}@Overridepublic void onScanViewButtonClick() {//全览按钮点击回调}@Overridepublic void onLockMap(boolean b) {//锁地图状态发生变化时回调}@Overridepublic void onNaviViewLoaded() {Log.d("wlx", "导航页面加载成功");Log.d("wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");}@Overridepublic void onMapTypeChanged(int i) {}@Overridepublic void onNaviViewShowMode(int i) {}
}

然后是布局文件activity_navi.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.amap.api.navi.AMapNaviViewandroid:id="@+id/navi_view"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"/>
</LinearLayout>

其中有实时导航和模拟导航

@Overridepublic void onCalculateRouteSuccess(int[] ints) {//多路径算路成功回调
//        mAMapNavi.startNavi(NaviType.EMULATOR);//模拟导航mAMapNavi.startNavi(NaviType.GPS);//实时导航}

步行导航和骑行导航与驾车导航就更改一句话就可以了

@Overridepublic void onInitNaviSuccess() {//初始化成功/*** 方法: int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数:** @congestion 躲避拥堵* @avoidhightspeed 不走高速* @cost 避免收费* @hightspeed 高速优先* @multipleroute 多路径**  说明: 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。*  注意: 不走高速与高速优先不能同时为true 高速优先与避免收费不能同时为true*/int strategy = 0;try {//再次强调,最后一个参数为true时代表多路径,否则代表单路径strategy = mAMapNavi.strategyConvert(true, true, true, false, true);} catch (Exception e) {e.printStackTrace();}mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);//起始点坐标、终点坐标、途经点坐标、strategy
//        mAMapNavi.calculateWalkRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//步行导航
//        mAMapNavi.calculateRideRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//骑行导航}

以上就实现了路线导航功能,实际开发我们需要根据实际需求来更改

(七)高德地图之路线导航相关推荐

  1. 嵌入地图跳转高德地图_根据输入的地址跳转到百度地图或者高德地图进行路线导航...

    写在前面: 尽管精确度已然调至最佳, 但还是会有一定程度的定位误差, 作为开发者我已然尽力, 只能希望apple官方做些优化吧 输入目的地地址时最好填入区, 不然有时会定位不到 http://deve ...

  2. 高德地图——骑行导航

    高德地图--骑行导航 插件:plugin=AMap.Riding //中间不能有途径 1.骑行路线--使用keyword new AMap.Riding({map:map,panel:'panel' ...

  3. Android 高德地图中路线规划绘制界面线路

    Android 高德地图中路线规划绘制界面线路 下面代码是根据很多的经纬度的点,绘制出直线的线路.比较死板 /*** 绘制景区的路线*/private void setRouteInfo(List&l ...

  4. 高德地图三维实景导航:立体实景指引更清晰,复杂路口不再犹豫

    随着我国城市道路的不断建设,当前在北上广深等一些国内大型城市,道路情况越来越复杂,每座城市都遍布着立交桥.多岔路等复杂路况,道路实际上已经从平面转变成为了三维立体结构.但对于已经成为出行刚需的手机地图 ...

  5. Android高德地图多路线规划----可点击选择路线

    最近项目上有用到高德sdk,需求上要求多路线规划,并且可以在地图上点击选择路线.本着不想重复造轮子的驱使下(其实想偷懒),网上似乎没有例子,也可能是我找不到.最后没办法,只能自己实现. 在此做为记录, ...

  6. 高德地图——驾驶路线

    高德地图--驾驶路线 插件:AMap.Driving 方法一:规定路线 new AMap.Driving({map:map,panel:'panel'}).search([{keyword:起点,ci ...

  7. 高德地图安卓 拖拽选点_行车记录仪当“眼睛” 高德地图手机AR导航再次升级...

    来源标题:行车记录仪当"眼睛" 高德地图手机AR导航再次升级 高德地图近日发布新版本,AR驾车导航服务再次升级,支持连接车内行车记录仪.由行车记录仪的摄像头充当"眼睛&q ...

  8. 高德地图ar步行导航使用教程分享

    高德地图功能多,最近向用户展示了新功能--ar步行导航.很多小伙伴对这个功能还不太了解.所以换换为大家准备了详细的使用教程共享.一起看看吧! 高德地图ar步行导航使用教程 1.打开高德地图.选择下方& ...

  9. Android调用高德地图app语音导航

    直接调用高德地图app进行导航 首先,要先进入高德开放平台,注册登录以后,创建自己的APP,然后会生成appkey 高德开放平台网址: http://lbs.amap.com/ 然后下载jar包导入项 ...

最新文章

  1. dubbo 扩展单例的保存
  2. C#中要使一个类支持FOREACH遍历,实现过程怎样? [转]
  3. 谁是最好的Coder
  4. 太平鸟上云 推动中国服饰行业新零售转型
  5. java锁对象的区别吗_Java中对象级别锁和类级别锁之间的区别
  6. linux运行c程序a. out,无法运行已编译的文件 – bash:./ a.out:权限被拒绝. (我试过chmod)...
  7. BigDecimal 加减乘除及对比
  8. 学计算机专业你后悔吗?为什么?
  9. 视频倍速插件(火狐,谷歌)
  10. python怎么读取pdf为文本_Python使用PDFMiner解析PDF
  11. java jdbc 批处理_JDBC的批处理操作
  12. 黑盒测试设计专题:正交试验
  13. web前端设计与开发大作业(一)----黄山风景区
  14. accept函数的参数不是随便填的
  15. 你不知道的几个牛逼网站,欢迎收藏
  16. 消费复苏中的企业该走向何处?
  17. Jenkins中出现No valid crumb was included in the request
  18. 快速了解Mesh组网及应用
  19. 科技将把我们带向哪里
  20. DHTML是dynamic HTML短语的缩写,即动态HTML

热门文章

  1. Git入门:边玩边学
  2. 思科下载好了如何注册
  3. 女人,男人,... (转载)
  4. mysql删除链接服务器_在sql server 数据库建立链接服务器和删除
  5. Opencv的Vec类使用说明(图像像素.at方法访问)
  6. [Django] 后台管理系统
  7. 大航海时代2人物剧情(转载)
  8. A-Level Economics 真题及答案解析
  9. msisdn与imsi简介
  10. 大数据毕业设计 机器学习股票数据量化分析与预测系统 - python