开发 Android 导航SDK 概述

概述 最后更新时间: 2021年11月04日

重要:由于个人信息保护法的实施,从导航8.1.0版本起对旧版本SDK不兼容,请务必确保调用SDK任何接口前先调用更新隐私合规updatePrivacyShow、updatePrivacyAgree两个接口,且在初始化时需要对抛出的异常进行捕获,否则可能导致编译不通过等异常情况。具体可参考开发指南-其他配置注意事项-隐私合规接口说明传入相关参数。

Android导航SDK是一款针对在线导航的产品,产品功能涵盖了路径规划、专业导航、UI界面定制、导航组件、货车导航等。并且,导航路径规划与实时交通信息相结合,力求为用户提供更加合理、准确、人性化的导航服务。应用场景包括但不限于O2O、网约车出行、货运物流快递等。

在您接入SDK的前中后整个过程中,我们都会提供全方位的支持,包括官网文档、官方Demo商务合作工单、大客户钉钉群、现场支持等。

面向的读者

Android导航SDK是提供给具有一定Android编程经验和了解面向对象概念的读者使用的。 

  • 模拟导航
    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 = new ArrayList<NaviLatLng>();
    @Override
    public void onInitNaviSuccess() {
    	super.onInitNaviSuccess();
    	sList.add(mStartLatlng);
    	eList.add(mEndLatlng);
    	int strategy = 0;
    	strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
    	AMapCarInfo carInfo = new AMapCarInfo();
    	mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);
    } 
    @Override
    public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
    	super.onCalculateRouteSuccess(aMapCalcRouteResult);
    	mAMapNavi.startNavi(NaviType.EMULATOR);
    }
    
    
        
  • 导航组件
     LatLng p2 = new LatLng(39.917337, 116.397056);//故宫博物院
     LatLng p3 = new LatLng(39.904556, 116.427231);//北京站
     AmapNaviParams params = new AmapNaviParams(new Poi("北京站", p3, ""), null, new Poi("故宫博物院", p2, ""), AmapNaviType.DRIVER);
     params.setUseInnerVoice(true);
     AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, IndexActivity.this);
  • 货车导航组件
     LatLng p2 = new LatLng(39.917337, 116.397056);//故宫博物院
     LatLng p3 = new LatLng(39.904556, 116.427231);//北京站
     AmapNaviParams params = new AmapNaviParams(new Poi("北京站", p3, ""), null, new Poi("故宫博物院", p2, ""), AmapNaviType.DRIVER);
     params.setUseInnerVoice(true);
     AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, IndexActivity.this);
  • AMapNaviView完全自定义UI和图面
    private TextView textNextRoadDistance;//下个路口距离
    private TextView textNextRoadName;//下个路名
    private NextTurnTipView nextTurnTipView;//转向箭头,Demo中开源
    /** ------- 导航基本信息的回调 ----- */
    @Override
    public void onNaviInfoUpdate(NaviInfo naviInfo) {
     		super.onNaviInfoUpdate(naviInfo);
    
    		/**
    		* 更新路口转向图标
    		*/
    		if(naviInfo.getIconBitmap() != null){
    			nextTurnTipView.setImageBitmap(naviInfo.getIconBitmap());
    		}else{
    			nextTurnTipView.setIconType(naviInfo.getIconType());
    		}
    		/**
    		* 更新下一路口 路名及 距离
    		*/
    		textNextRoadName.setText(naviInfo.getNextRoadName());
    		textNextRoadDistance.setText(NaviUtil.formatKM(naviInfo.getCurStepRetainDistance()));
    }
    
    private DriveWayLinear mDriveWayView;//车道信息,Demo中开源
    /** ----- start 车道信息的回调 start ------- */
    @Override
    public void showLaneInfo(AMapLaneInfo aMapLaneInfo) {
    		mDriveWayView.setVisibility(View.VISIBLE);
    		mDriveWayView.buildDriveWay(aMapLaneInfo);
    }
    private TrafficProgressBar mTrafficBarView;//路况条,Demo中开源
    @Override
    public void onNaviInfoUpdate(NaviInfo naviInfo) {
    		super.onNaviInfoUpdate(naviInfo);
    		int allLength = mAMapNavi.getNaviPath().getAllLength();
    		/**
    		* 导航路况条 更新
    		*/
    		List<AMapTrafficStatus> trafficStatuses = mAMapNavi.getTrafficStatuses(0, 0);
    		mTrafficBarView.update(allLength, naviInfo.getPathRetainDistance(), trafficStatuses);
    }
    
    /**
    * 自车位置类
    */
    CarOverlay carOverlay;//自车类,Demo中开源
    carOverlay = new CarOverlay(AllCustomCarRouteActivity.this, mAMapNaviView);
    /**
    * GPS 定位信息的回调函数
    * @param location 当前定位的GPS信息
    */
    @Override
    public void onLocationChange(AMapNaviLocation location) {
    		if (carOverlay != null && location != null) {
    				carOverlay.draw(mAMapNaviView.getMap(), new LatLng(location.getCoord().getLatitude(), location.getCoord().getLongitude()), location.getBearing());
    		}
    }
    
    private ZoomInIntersectionView mRealCrossView;//实景图,Demo开源
    private AMapModeCrossOverlay mModeCrossView;//模型图,Demo开源
    @Override
    public void showCross(AMapNaviCross aMapNaviCross) {
    		mRealCrossView.setVisibility(View.VISIBLE);
    		mRealCrossView.setIntersectionBitMap(aMapNaviCross);
    }
    
    @Override
    public void hideCross() {
    		mRealCrossView.setVisibility(View.GONE);
    }
    
    @Override
    public void showModeCross(AMapModelCross aMapModelCross) {
    		try {
    				mModeCrossView.showCrossOverlay(aMapModelCross.getPicBuf1());
    		} catch (Throwable e) {
    				e.printStackTrace();
    		}
    }
    
    @Override
    public void hideModeCross() {
    	mModeCrossView.hideCrossOverlay();
    }
    
    private AMapCameraOverlay cameraOverlay;//摄像头实例,Demo开源
    @Override
    public void updateCameraInfo(AMapNaviCameraInfo[] aMapCameraInfos) {
    		if (cameraOverlay != null) {
    			cameraOverlay.draw(mAMapNaviView.getMap(), aMapCameraInfos);
    		}
    }

兼容性

v6.4.0及以上版本支持Android 6.0及以上系统

给开发者的建议

对于高德开放平台提供的地图API/SDK,若您以非商业目的使用,则均可免费使用 。若您以商业目的使用,则您需事先从高德获取商用授权。您需要先申请Key,才能使用该服务。关于具体使用规则,请参阅《高德地图开放平台服务协议》获得详细信息。 

返回顶部 示例中心 常见问题 智能客服 公众号
二维码