Android 应用内实现导航页面,接入百度SDK内置导航,高德SDK内置导航

1、首先到百度地图开放平台创建应用,获取应用AK

http://lbsyun.baidu.com/apiconsole/key

2、到百度语言平台创建应用,获取Secret Key和语言APP ID

http://yuyin.baidu.com/app

 

3、到百度地图开放平台下载Android 导航SDK

https://pan.baidu.com/s/1z1cSWmkcE8kHhAXUVL4Ebw

 

4、修改ak和sk 和APP ID 还有使用你的keystore打包即可完成百度内置导航接入

配置你的ak,sk

 

配置你的APP ID

 

 配置你的签名

 

 

demo 链接:https://pan.baidu.com/s/1z1cSWmkcE8kHhAXUVL4Ebw

密码:在线回复QQ1085220040

在线回复bug.QQ1085220040

 

运行即可:

 

2、高德地图内置导航实现——比集成百度内置导航方便,建议使用

 

申请key:https://lbs.amap.com/

 

实现demo:https://download.csdn.net/download/meixi_android/12704895 

 

在线bug交流:扣扣1085220040

 

package com.example.ampnavigation;

import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.amap.api.maps.model.Circle;
import com.amap.api.maps.model.CircleOptions;
import com.amap.api.maps.model.LatLng;
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.AMapNaviViewOptions;
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 java.util.ArrayList;
import java.util.List;


public class NaviActivity extends AppCompatActivity {
    private AMapNaviView mAMapNaviView;
    private AMapNavi mAMapNavi;

    protected AlertDialog.Builder builder;
    protected AlertDialog dialog;

    private String las,los;
    private int  fwint;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navi);

        las = getIntent().getStringExtra("las");
        los = getIntent().getStringExtra("los");
        fwint = getIntent().getIntExtra("fw",0);

        //获取 AMapNaviView 实例
        mAMapNaviView = findViewById(R.id.navi_view);
        //获取AMapNavi实例
        mAMapNavi = AMapNavi.getInstance(getApplicationContext());
//        mAMapNavi.setUseInnerVoice(true);
        mAMapNavi.setUseInnerVoice(true,true);

        AMapNaviViewOptions options = mAMapNaviView.getViewOptions();
        //隐藏SDK默认的布局
//        options.setLayoutVisible(false);
//        options.setTrafficBarEnabled(true);
        mAMapNaviView.setViewOptions(options);

        mAMapNavi.setMultipleRouteNaviMode(true);
        mAMapNaviView.setAMapNaviViewListener(new AMapNaviViewListener() {
            @Override
            public void onNaviSetting() {

            }

            @Override
            public void onNaviCancel() {
                finish();
                Log.i("lgq","cancel");
            }

            @Override
            public boolean onNaviBackClick() {
                Log.i("lgq","cancelback");
               showNavBackDialog();
                return true;
            }

            @Override
            public void onNaviMapMode(int i) {

            }

            @Override
            public void onNaviTurnClick() {

            }

            @Override
            public void onNextRoadClick() {

            }

            @Override
            public void onScanViewButtonClick() {

            }

            @Override
            public void onLockMap(boolean b) {

            }

            @Override
            public void onNaviViewLoaded() {

            }

            @Override
            public void onMapTypeChanged(int i) {

            }

            @Override
            public void onNaviViewShowMode(int i) {

            }
        });
        mAMapNaviView.onCreate(savedInstanceState);

        //添加监听回调,用于处理算路成功
        mAMapNavi.addAMapNaviListener(new AMapNaviListener() {
            @Override
            public void onInitNaviFailure() {

            }

            @Override
            public void onInitNaviSuccess() {
                final double startLatitude = 22.991262;
                final double startLongitude = 113.707716;
                final double targetLatitude = 23.001662;
                final double targetLongitude = 113.607816;
                //navigate(targetLatitude,targetLongitude);
                /**
                 * 方法:
                 *   int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute);
                 * 参数:
                 * @congestion 躲避拥堵
                 * @avoidhightspeed 不走高速
                 * @cost 避免收费
                 * @hightspeed 高速优先
                 * @multipleroute 多路径
                 *
                 * 说明:
                 *      以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。
                 * 注意:
                 *      不走高速与高速优先不能同时为true
                 *      高速优先与避免收费不能同时为true
                 */
                int strategy = 0;
                try {
                    strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                List<NaviLatLng> sList = new ArrayList<NaviLatLng>() {
                    {
                        add(new NaviLatLng(startLatitude, startLongitude));
                    }
                };
                List<NaviLatLng> eList = new ArrayList<NaviLatLng>() {
                    {
                        add(new NaviLatLng(targetLatitude, targetLongitude));
                    }
                };
                List<NaviLatLng> mWayPointList = null;
                mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);

                /*绘制圆*/
                int alpha = 160;
                Circle circle = mAMapNaviView.getMap()
                        .addCircle(new CircleOptions().
                                center(new LatLng(targetLatitude, targetLongitude)).
                                radius(1000).
                                fillColor(Color.argb(alpha, 10, 200, 1)).
                                fillColor(Color.parseColor("#19999999")).
                                strokeColor(Color.parseColor("#33df6e50")).
                                strokeWidth(10));
            }

            @Override
            public void onStartNavi(int i) {

            }

            @Override
            public void onTrafficStatusUpdate() {

            }

            @Override
            public void onLocationChange(AMapNaviLocation aMapNaviLocation) {

            }

            @Override
            public void onGetNavigationText(int i, String s) {
                Log.i("lgq","文字啦啦啦   ====  "+s);
            }

            @Override
            public void onGetNavigationText(String s) {
                Log.i("lgq","文字啦eeee啦啦   ====  "+s);
            }

            @Override
            public void onEndEmulatorNavi() {

            }

            @Override
            public void onArriveDestination() {

            }

            @Override
            public void onCalculateRouteFailure(int i) {

            }

            @Override
            public void onReCalculateRouteForYaw() {

            }

            @Override
            public void onReCalculateRouteForTrafficJam() {

            }

            @Override
            public void onArrivedWayPoint(int i) {

            }

            @Override
            public void onGpsOpenStatus(boolean b) {

            }

            @Override
            public void onNaviInfoUpdate(NaviInfo naviInfo) {

            }

            @Override
            public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {

            }

            @Override
            public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {

            }

            @Override
            public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {

            }

            @Override
            public void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {

            }

            @Override
            public void showCross(AMapNaviCross aMapNaviCross) {

            }

            @Override
            public void hideCross() {

            }

            @Override
            public void showModeCross(AMapModelCross aMapModelCross) {

            }

            @Override
            public void hideModeCross() {

            }

            @Override
            public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {

            }

            @Override
            public void showLaneInfo(AMapLaneInfo aMapLaneInfo) {

            }

            @Override
            public void hideLaneInfo() {

            }

            @Override
            public void onCalculateRouteSuccess(int[] ints) {
                mAMapNavi.startNavi(NaviType.GPS);
            }

            @Override
            public void notifyParallelRoad(int i) {

            }

            @Override
            public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {

            }

            @Override
            public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {

            }

            @Override
            public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {

            }

            @Override
            public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {

            }

            @Override
            public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {

            }

            @Override
            public void onPlayRing(int i) {

            }

            @Override
            public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {

            }

            @Override
            public void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {

            }

            @Override
            public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {

            }
        });

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mAMapNavi.startSpeak();
            }
        }, 500);
    }

    @Override
    protected void onResume() {
        super.onResume();
//        mAMapNavi.startNavi(1);
        mAMapNaviView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mAMapNaviView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mAMapNaviView.onDestroy();
        mAMapNavi.destroy();
        mAMapNavi=null;
        Log.i("lgqddddddddddddddd","dddddddd33");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            showNavBackDialog();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    /***
     * 返回按钮 dialog提示
     */
    private void showNavBackDialog() {
        builder = new AlertDialog.Builder(this);
        builder.setTitle("提示");
        builder.setMessage("确定退出导航?");
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                finish();
            }
        });
        dialog = builder.show();
    }

    /***
     * 回收dialog
     */
    private void dismissDialog(){
        if(dialog != null){
            if(dialog.isShowing()){
                dialog.dismiss();
            }
            dialog = null;
        }
        builder = null;
    }
}

 

【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值