1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android开发百度地图步行导航

android开发百度地图步行导航

时间:2022-07-14 18:29:12

相关推荐

android开发百度地图步行导航

准备工作: 在百度地图上下载依赖,配置key。创建一个demo项目,可显示百度地图的添加按钮,点击按钮,开始导航发起算路我用的是routePlanWithRouteNode这个方法,官网中routePlanWithParams这个方法,我调着闪退,目前不清楚原因这个版本的需要设置隐私政策 SDKInitializer.setAgreePrivacy(this,true);

// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContextSDKInitializer.setAgreePrivacy(this,true);// 默认本地个性化地图初始化方法SDKInitializer.initialize(Utils.getContext());//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。SDKInitializer.setCoordType(CoordType.BD09LL);

此时地图会显示比例尺,显示纯绿色 如果用了LocationClient,也给他设置一下

LocationClient.setAgreePrivacy(true);

在mainAcitivity中,添加如下代码

private WalkNavigateHelper helper = null;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void engineInitSuccess() {Log.d("=========", "BikeNavi engineInitSuccess引擎初始化成功");startWebNavi();}@Overridepublic 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);// 官网//构造WalkNaviLaunchParamWalkNaviLaunchParam walkParam = new WalkNaviLaunchParam().startNodeInfo(startNode).endNodeInfo(endNode);//获取WalkNavigateHelper实例 //发起算路helper.routePlanWithRouteNode(walkParam, new IWRoutePlanListener() {@Overridepublic void onRoutePlanStart() {Log.d("=======", "WalkNavi onRoutePlanStart开始步行导航");}@Overridepublic void onRoutePlanSuccess() {Log.d("========", "onRoutePlanSuccess算路成功");Intent intent = new Intent();intent.setClass(getContext(), WNaviGuideActivity.class);startActivity(intent);}@Overridepublic void onRoutePlanFail(WalkRoutePlanError error) {Log.d("Walk", "WalkNavi onRoutePlanFail");}});}

创建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.api.walknavi.WalkNaviModeSwitchListener;import com.api.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 = "";@Overrideprotected void onDestroy() {super.onDestroy();mNaviHelper.quit();}@Overrideprotected void onResume() {super.onResume();mNaviHelper.resume();}@Overrideprotected void onPause() {super.onPause();mNaviHelper.pause();}Handler handler = new Handler() {@Overridepublic 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;}@Overrideprotected 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() {@Overridepublic void onWalkNaviModeChange(int mode, WalkNaviModeSwitchListener listener) {Log.d("======", "onWalkNaviModeChange : " + mode);mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, listener);}/* @Description: 这个是在退出导航时自动调用的方法,在这里要把对象进行释放,避免空对象的产生* @Author: LiY ue*/@Overridepublic void onNaviExit() {Log.d("======", "onNaviExit");handler.removeMessages(0x001);handler.removeMessages(0x002);handler.removeMessages(0x003);}});/*** 诱导文本回调* @param s 诱导文本* @param b 是否抢先播报* @return*/mNaviHelper.setTTsPlayer(new IWTTSPlayer() {@Overridepublic 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, newIWRouteGuidanceListener() {/*** @Description: 诱导图标更改方法回调* @Author: LY*/@Overridepublic void onRouteGuideIconUpdate(Drawable icon) {}@Overridepublic 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: 诱导信息*/@Overridepublic void onRoadGuideTextUpdate(CharSequence charSequence, CharSequencecharSequence1) {Log.d(TAG, "onRoadGuideTextUpdate charSequence=: " + charSequence + " charSequence1 = : " +charSequence1);orient = charSequence.toString() + charSequence1.toString();}/**** @Description: 总剩余距离回调*/@Overridepublic void onRemainDistanceUpdate(CharSequence charSequence) {Log.d(TAG, "onRemainDistanceUpdate: charSequence = :" + charSequence);if (isPreSPEAKtotal) {}}/**** @Description: 总剩余时间回调* @Author: LY*/@Overridepublic void onRemainTimeUpdate(CharSequence charSequence) {Log.d(TAG, "onRemainTimeUpdate: charSequence = :" + charSequence);if (isPreSPEAKtotal) {isPreSPEAKtotal = false;}}@Overridepublic void onGpsStatusChange(CharSequence charSequence, Drawable drawable) {Log.d(TAG, "onGpsStatusChange: charSequence = :" + charSequence);}@Overridepublic void onRouteFarAway(CharSequence charSequence, Drawable drawable) {Log.d(TAG, "onRouteFarAway: charSequence = :" + charSequence);}/*** @Description: 偏航规划中*/@Overridepublic void onRoutePlanYawing(CharSequence charSequence, Drawable drawable) {Log.d(TAG, "onRoutePlanYawing: charSequence = :" + charSequence);}/**** @Description: 重新算路成功*/@Overridepublic void onReRouteComplete() {}/**** @Description: 到达目的地回调*/@Overridepublic void onArriveDest() {handler.sendEmptyMessageDelayed(0x003, 6000);}@Overridepublic void onIndoorEnd(Message msg) {}@Overridepublic void onFinalEnd(Message msg) {}@Overridepublic void onVibrate() {}});handler.sendEmptyMessage(0x001);handler.sendEmptyMessage(0x002);}@Overridepublic 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);}}}}

在AndroidManifest中声明WNaviGuideActivity

<activity android:name=".WNaviGuideActivity"></activity>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。