android开发百度地图步行导航

  1. 准备工作: 在百度地图上下载依赖,配置key。
  2. 创建一个demo项目,可显示百度地图的
  3. 添加按钮,点击按钮,开始导航
  4. 发起算路我用的是routePlanWithRouteNode这个方法,官网中routePlanWithParams这个方法,我调着闪退,目前不清楚原因
  5. 这个版本的需要设置隐私政策 SDKInitializer.setAgreePrivacy(this,true);
		// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
        SDKInitializer.setAgreePrivacy(this,true);
        // 默认本地个性化地图初始化方法
        SDKInitializer.initialize(Utils.getContext());

        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
  1. 此时地图会显示比例尺,显示纯绿色 如果用了LocationClient,也给他设置一下
LocationClient.setAgreePrivacy(true);
  1. 在mainAcitivity中,添加如下代码
	private WalkNavigateHelper helper = null;
	
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initPermissions();  // 初始化权限
        setContentView(R.layout.activity_main); // 填充视图
        initView();  // 初始化地图
     
		// 点击按钮开始导航
        ImageButton imageButton = findViewById(R.id.nav_btn);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 初始化步行导航  
                startBikeNavi();
            }
        });
    }
	// 初始化权限
 	private void initPermissions() {
        if (Build.VERSION.SDK_INT >= 23) {
            ArrayList<String> permissionsList = new ArrayList<>();
            String[] permissions = {
                    Manifest.permission.ACCESS_NETWORK_STATE,
                    Manifest.permission.INTERNET,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
            };

            for (String perm : permissions) {
                if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(perm)) {
                    permissionsList.add(perm);
                    // 进入到这里代表没有权限.
                }
                if (!permissionsList.isEmpty()) {
                    String[] strings = new String[permissionsList.size()];
                    requestPermissions(permissionsList.toArray(strings), 0);
                }
            }

        }
    }

	/**
     * @Description: 引擎初始化
     * @Author: LY
     */
    private void startBikeNavi() {
        Log.d("=========", "startBikeNavi");
        try {
            helper = WalkNavigateHelper.getInstance();
            helper.initNaviEngine(this, new IWEngineInitListener() {
                @Override
                public void engineInitSuccess() {
                    Log.d("=========", "BikeNavi engineInitSuccess引擎初始化成功");
                    startWebNavi();
                }

                @Override
                public void engineInitFail() {
                    Log.d("=========", "BikeNavi engineInitFail");
                    BikeNavigateHelper.getInstance().unInitNaviEngine();
                }
            });
        } catch (Exception e) {
            Log.d("=========", "startBikeNavi Exception");
            e.printStackTrace();
        }
    }


    /**
     * @Description: 启动百度地图导航(Web)
     * @Author: LY
     */
    private void startWebNavi() {
        //起终点位置
        LatLng walkStartNode = new LatLng(40.047416, 116.312143);
        LatLng walkEndNode = new LatLng(40.048424, 116.313513);

        WalkRouteNodeInfo startNode = new WalkRouteNodeInfo();
        startNode.setLocation(walkStartNode);
        WalkRouteNodeInfo endNode = new WalkRouteNodeInfo();
        endNode.setLocation(walkEndNode);
        // 官网
        //构造WalkNaviLaunchParam
        WalkNaviLaunchParam walkParam = new 	WalkNaviLaunchParam().startNodeInfo(startNode).endNodeInfo(endNode);
        //获取WalkNavigateHelper实例 //发起算路
        helper.routePlanWithRouteNode(walkParam, new IWRoutePlanListener() {
            @Override
            public void onRoutePlanStart() {
                Log.d("=======", "WalkNavi onRoutePlanStart开始步行导航");
            }

            @Override
            public void onRoutePlanSuccess() {
                Log.d("========", "onRoutePlanSuccess算路成功");
                Intent intent = new Intent();
                intent.setClass(getContext(), WNaviGuideActivity.class);
                startActivity(intent);
            }

            @Override
            public void onRoutePlanFail(WalkRoutePlanError error) {
                Log.d("Walk", "WalkNavi onRoutePlanFail");
            }

        });      
    }
  1. 创建WNaviGuideActivity类,改包名,无脑粘
package com.example.locationapp;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import androidx.annotation.NonNull;

import com.baidu.mapapi.walknavi.WalkNavigateHelper;
import com.baidu.mapapi.walknavi.adapter.IWNaviStatusListener;
import com.baidu.mapapi.walknavi.adapter.IWRouteGuidanceListener;
import com.baidu.mapapi.walknavi.adapter.IWTTSPlayer;
import com.baidu.mapapi.walknavi.model.RouteGuideKind;
import com.baidu.platform.comapi.walknavi.WalkNaviModeSwitchListener;
import com.baidu.platform.comapi.walknavi.widget.ArCameraView;

public class WNaviGuideActivity extends Activity {
    private final static String TAG = WNaviGuideActivity.class.getSimpleName();

    private WalkNavigateHelper mNaviHelper;

    private boolean isPreSPEAKtotal = true;
    private String orient = "";

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mNaviHelper.quit();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mNaviHelper.resume();
    }

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


    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0x001) {
                ChangeState();
                handler.sendEmptyMessageDelayed(0x001, 45000);
            }
            if (msg.what == 0x002) {
                handler.sendEmptyMessageDelayed(0x002, 30000);
            }
            if (msg.what == 0x003) {

                startActivity(new Intent(WNaviGuideActivity.this, MainActivity.class));
            }
        }
    };

    private void ChangeState() {
        isPreSPEAKtotal = true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mNaviHelper = WalkNavigateHelper.getInstance();
        try {
            View view = mNaviHelper.onCreate(WNaviGuideActivity.this);
            if (view != null) {
                setContentView(view);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //设置步行导航状态监听
        mNaviHelper.setWalkNaviStatusListener(new IWNaviStatusListener() {
            @Override
            public void onWalkNaviModeChange(int mode, WalkNaviModeSwitchListener listener) {
                Log.d("======", "onWalkNaviModeChange : " + mode);
                mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, listener);
            }

            /* @Description: 这个是在退出导航时自动调用的方法,在这里要把对象进行释放,避免空对象的产生
             * @Author: LiY                                                                                                                                                                         ue
             */
            @Override
            public void onNaviExit() {
                Log.d("======", "onNaviExit");
                handler.removeMessages(0x001);
                handler.removeMessages(0x002);
                handler.removeMessages(0x003);
            }
        });

        /**
         * 诱导文本回调
         * @param s 诱导文本
         * @param b 是否抢先播报
         * @return
         */
        mNaviHelper.setTTsPlayer(new IWTTSPlayer() {
            @Override
            public int playTTSText(final String s, boolean b) {
                Log.d(TAG, "tts: " + s);
                return 0;
            }
        });


        boolean startResult = mNaviHelper.startWalkNavi(WNaviGuideActivity.this);
        Log.e(TAG, "startWalkNavi result : " + startResult);
        //设置路线指引监听
        mNaviHelper.setRouteGuidanceListener(this, new

                IWRouteGuidanceListener() {
                    /**
                     * @Description: 诱导图标更改方法回调
                     * @Author: LY
                     */
                    @Override
                    public void onRouteGuideIconUpdate(Drawable icon) {

                    }

                    @Override
                    public void onRouteGuideKind(RouteGuideKind routeGuideKind) {
                        Log.d("======", "onRouteGuideKind: " + routeGuideKind);
                        if (routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_PassRoad_Left || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_PassRoad_Right || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_Right_PassRoad_Front || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_Right_PassRoad_UTurn)

                            if (routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Front || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Left || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Left_Front || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Right || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Right_Back || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Right_Front){
                                Log.d("========", "onRouteGuideKind: aaaaaa");
                            }

                    }

                    /**
                     * @Description: 诱导信息
                     */
                    @Override
                    public void onRoadGuideTextUpdate(CharSequence charSequence, CharSequence
                            charSequence1) {
                        Log.d(TAG, "onRoadGuideTextUpdate   charSequence=: " + charSequence + "   charSequence1 = : " +
                                charSequence1);
                        orient = charSequence.toString() + charSequence1.toString();

                    }

                    /**
                     *
                     * @Description: 总剩余距离回调
                     */
                    @Override
                    public void onRemainDistanceUpdate(CharSequence charSequence) {
                        Log.d(TAG, "onRemainDistanceUpdate: charSequence = :" + charSequence);
                        if (isPreSPEAKtotal) {
                        }
                    }

                    /**
                     *
                     * @Description: 总剩余时间回调
                     * @Author: LY
                     */
                    @Override
                    public void onRemainTimeUpdate(CharSequence charSequence) {
                        Log.d(TAG, "onRemainTimeUpdate: charSequence = :" + charSequence);
                        if (isPreSPEAKtotal) {
                            isPreSPEAKtotal = false;
                        }
                    }


                    @Override
                    public void onGpsStatusChange(CharSequence charSequence, Drawable drawable) {
                        Log.d(TAG, "onGpsStatusChange: charSequence = :" + charSequence);

                    }


                    @Override
                    public void onRouteFarAway(CharSequence charSequence, Drawable drawable) {
                        Log.d(TAG, "onRouteFarAway: charSequence = :" + charSequence);
                    }

                    /**
                     * @Description: 偏航规划中
                     */
                    @Override
                    public void onRoutePlanYawing(CharSequence charSequence, Drawable drawable) {
                        Log.d(TAG, "onRoutePlanYawing: charSequence = :" + charSequence);

                    }

                    /**
                     *
                     * @Description: 重新算路成功
                     */
                    @Override
                    public void onReRouteComplete() {
                    }

                    /**
                     *
                     * @Description: 到达目的地回调
                     */
                    @Override
                    public void onArriveDest() {
                        handler.sendEmptyMessageDelayed(0x003, 6000);
                    }

                    @Override
                    public void onIndoorEnd(Message msg) {

                    }

                    @Override
                    public void onFinalEnd(Message msg) {

                    }

                    @Override
                    public void onVibrate() {

                    }
                });
        handler.sendEmptyMessage(0x001);
        handler.sendEmptyMessage(0x002);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == ArCameraView.WALK_AR_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) {
                Toast.makeText(WNaviGuideActivity.this, "没有相机权限,请打开后重试", Toast.LENGTH_SHORT).show();
            } else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                mNaviHelper.startCameraAndSetMapView(WNaviGuideActivity.this);
            }
        }
    }
}


  1. 在AndroidManifest中声明WNaviGuideActivity
<activity android:name=".WNaviGuideActivity">

        </activity>
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
百度地图是一款非常受欢迎的手机导航应用,它提供了丰富的导航功能,包括语音导航。在Android平台上,百度地图的语音导航功能支持外置语音开发。 外置语音开发是指在导航应用中,通过与外部语音识别引擎进行交互,以实现更高质量的语音导航功能。百度地图支持与外部语音引擎进行对接,例如可以与科大讯飞等第三方语音引擎进行集成。 通过外置语音开发,可以实现更加智能的语音导航功能。用户可以使用自己喜欢的语音助手,例如“小度同学”或者其他第三方语音助手,与百度地图进行集成,实现更加个性化的语音导航体验。 同时,外置语音开发还可以提供更多的语音交互功能。用户不仅可以通过语音指令进行导航,还可以进行其他操作,例如查询周边信息、调节导航设置等等,从而提升用户的使用便利性和体验。 外置语音开发还可以加强导航的准确性和响应速度。通过与高质量的语音识别引擎进行对接,可以提高导航中语音指令的识别准确率,并且加快导航系统的响应速度,从而让用户获得更好的导航体验。 总而言之,百度地图的外置语音开发为用户提供了更加智能、个性化的语音导航功能,提升了导航的准确性和用户体验。用户可以根据自己的需求选择合适的语音助手,并通过语音交互进行更加方便快捷的导航操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值