百度地图导航

news/2024/11/30 18:52:00/
 只说步骤

大牛们看着不要笑就好

主页面的布局里面就一个button

 

<Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/start_nav2_btn"android:textSize="18sp"android:padding="20dp"android:layout_gravity="center_horizontal"android:text="使用百度地图坐标一键导航"/>

第一步 :开始配置工程,需要的包都导进去;

带TTS的SDK

在新建的Android工程里的assets目录添加BaiduNaviSDK_Resource_vX_X_X.png和channel文件,在libs目录添加BaiduNaviSDK_vX_X_X.jar、android_api_1.1_forsdk.jar、galaxy_mini.jar、galaxy_mini_lbs.jar、lbsCoreSDK.jar,在libs/armeabi目录添加libapp_BaiduNaviApplib_vX_X.so、libejTTS.so、libCNPackage.so、liblocnaviSDK.so。

sdk.jpg

不带TTS的SDK

在新建的Android工程里的assets目录添加BaiduNaviSDK_Resource_vX_X_X.png和channel文件,在libs目录添加BaiduNaviSDK_vX_X_X.jar、android_api_1.1_forsdk.jar、galaxy_mini.jar、galaxy_mini_lbs.jar、lbsCoreSDK.jar,在libs/armeabi目录添加libapp_BaiduNaviApplib_vX_X.so、liblocnaviSDK.so。

注意事项

对于android_api_1.1_forsdk.jar,它是百度移动统计SDK的部分,如果开发者同样也使用了百度移动统计SDK,并且添加android_api_1.1_forsdk.jar到工程时候发生代码冲突,此时应该把android_api_1.1_forsdk.jar去除掉。

 

第二步:在Manifest中添加使用权限及Android版本支持;

导航需要的权限如下:

<!--使用导航功能所需权限  -->  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" />    
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    
<uses-permission android:name="android.permission.INTERNET" />    
<uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" />    
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />    
<uses-permission android:name="android.permission.WAKE_LOCK" />    
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    
<uses-permission android:name="android.permission.ACCESS_GPS" />     
<uses-permission android:name="android.permission.GET_TASKS" />    
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<uses-permission android:name="android.permission.BROADCAST_STICKY" />    
<uses-permission android:name="android.permission.WRITE_SETTINGS" />    
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />    
<uses-permission android:name="android.permission.READ_PHONE_STATE" />    
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />    
<uses-permission android:name="android.permission.RECORD_AUDIO" />

注意在AndroidManifest.xml中application标签下添加如下代码,”com.baidu.lbsapi.API_KEY”中放入开发者申请的的API Key , 以及service。

<meta-data android:name="com.baidu.lbsapi.API_KEY"  
android:value="bEDE2Ut8zsrZGa4p9caq4LNU" /> //更换你的ak                                    
<service android:name="com.baidu.navi.location.f" android:enabled="true"/>

 

第三步:配置导航页activity,这不是主页面

再新建一个activity,在Manifest中加入导航页的声明

<activity android:name=".BNavigatorActivity"  
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"/>  

 

编写导航activity的代码 , ps:如果你懒得copy , 直接把百度demo里面的 BNavigatorActivity 复制到你的工程中

public void onCreate(Bundle savedInstanceState){  super.onCreate(savedInstanceState);  //创建NmapView  MapGLSurfaceView nMapView = BaiduNaviManager.getInstance().createNMapView(this);  //创建导航视图  View navigatorView = BNavigator.getInstance().init(BNavigatorActivity.this, getIntent().getExtras(), nMapView);  //填充视图  setContentView(navigatorView);  BNavigator.getInstance().setListener(mBNavigatorListener);  BNavigator.getInstance().startNav();  // 初始化TTS. 开发者也可以使用独立TTS模块,不用使用导航SDK提供的TTS  BNTTSPlayer.initPlayer();  //设置TTS播放回调  BNavigatorTTSPlayer.setTTSPlayerListener(new IBNTTSPlayerListener() {  @Override  public int playTTSText(String arg0, int arg1) {  //开发者可以使用其他TTS的API  return BNTTSPlayer.playTTSText(arg0, arg1);  }  @Override  public void phoneHangUp() {  //手机挂断  }  @Override  public void phoneCalling() {  //通话中  }  @Override  public int getTTSState() {  //开发者可以使用其他TTS的API,  return BNTTSPlayer.getTTSState();  }  });  BNRoutePlaner.getInstance().setObserver(new RoutePlanObserver(this, new IJumpToDownloadListener() {  @Override  public void onJumpToDownloadOfflineData() {  // TODO Auto-generated method stub  }  }));  }       private IBNavigatorListener mBNavigatorListener = new IBNavigatorListener() {  @Override  public void onYawingRequestSuccess() {  // TODO 偏航请求成功  }  @Override  public void onYawingRequestStart() {  // TODO 开始偏航请求  }  @Override  public void onPageJump(int jumpTiming, Object arg) {  // TODO 页面跳转回调  if(IBNavigatorListener.PAGE_JUMP_WHEN_GUIDE_END == jumpTiming){  finish();  }else if(IBNavigatorListener.PAGE_JUMP_WHEN_ROUTE_PLAN_FAIL == jumpTiming){  finish();  }  }  @Override  public void notifyGPSStatusData(int arg0) {  // TODO Auto-generated method stub  }  @Override  public void notifyLoacteData(LocData arg0) {  // TODO Auto-generated method stub  }  @Override  public void notifyNmeaData(String arg0) {  // TODO Auto-generated method stub  }  @Override  public void notifySensorData(SensorData arg0) {  // TODO Auto-generated method stub  }  @Override  public void notifyStartNav() {  // TODO Auto-generated method stub  BaiduNaviManager.getInstance().dismissWaitProgressDialog();  }  @Override  public void notifyViewModeChanged(int arg0) {  // TODO Auto-generated method stub  }  };@Override  public void onResume() {  BNavigator.getInstance().resume();  super.onResume();  BNMapController.getInstance().onResume();  };  @Override  public void onPause() {  BNavigator.getInstance().pause();  super.onPause();  BNMapController.getInstance().onPause();  }  @Override  public void onConfigurationChanged(Configuration newConfig) {  BNavigator.getInstance().onConfigurationChanged(newConfig);  super.onConfigurationChanged(newConfig);  }  public void onBackPressed(){  BNavigator.getInstance().onBackPressed();  }  @Override  public void onDestroy(){  BNavigator.destory();  BNRoutePlaner.getInstance().setObserver(null);  super.onDestroy();  }


 

 

第四步:在主页面输入起始点以及终点 ,并发起导航

 

1,先在onCreate方法中

		BaiduNaviManager.getInstance().initEngine(this, getSdcardDir(),mNaviEngineInitListener, new LBSAuthManagerListener() {@Overridepublic void onAuthResult(int status, String msg) {String str = null;if (0 == status) {str = "key校验成功!";} else {str = "key校验失败, " + msg;}Toast.makeText(RouteGuideDemo.this, str,Toast.LENGTH_LONG).show();}});findViewById(R.id.start_nav2_btn).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {if (mViaPoints.size() == 0) {launchNavigator();}                                                                                                                            }});

2,继续在主页面copy一下代码

 

    /*** 指定导航起终点启动GPS导航.起终点可为多种类型坐标系的地理坐标。* 前置条件:导航引擎初始化成功*/private void launchNavigator(){//这里给出一个起终点示例,实际应用中可以通过POI检索、外部POI来源等方式获取起终点坐标BNaviPoint startPoint = new BNaviPoint(116.307854,40.055878,"百度大厦", BNaviPoint.CoordinateType.BD09_MC);BNaviPoint endPoint = new BNaviPoint(116.403875,39.915168,"北京天安门", BNaviPoint.CoordinateType.BD09_MC);BaiduNaviManager.getInstance().launchNavigator(this,startPoint,                                      //起点(可指定坐标系)endPoint,                                        //终点(可指定坐标系)NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,       //算路方式true,                                            //真实导航BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略new OnStartNavigationListener() {                //跳转监听@Overridepublic void onJumpToNavigator(Bundle configParams) {Intent intent = new Intent(RouteGuideDemo.this, BNavigatorActivity.class);intent.putExtras(configParams);startActivity(intent);}@Overridepublic void onJumpToDownloader() {}});}
    private boolean mIsEngineInitSuccess = false;
	private NaviEngineInitListener mNaviEngineInitListener = new NaviEngineInitListener() {public void engineInitSuccess() {mIsEngineInitSuccess = true;}public void engineInitStart() {}public void engineInitFail() {}};private String getSdcardDir() {if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {return Environment.getExternalStorageDirectory().toString();}return null;}


 

至于起始点以及终点是要经纬度的 , launchNavigator() 直接把这个方法的经纬度换成起始点的就好


	/*** 指定导航起终点启动GPS导航.起终点可为多种类型坐标系的地理坐标。* 前置条件:导航引擎初始化成功*/private void launchNavigator2(){//这里给出一个起终点示例,实际应用中可以通过POI检索、外部POI来源等方式获取起终点坐标BNaviPoint startPoint = new BNaviPoint(116.307854,40.055878,"百度大厦", BNaviPoint.CoordinateType.BD09_MC);BNaviPoint endPoint = new BNaviPoint(116.403875,39.915168,"北京天安门", BNaviPoint.CoordinateType.BD09_MC);BaiduNaviManager.getInstance().launchNavigator(this,startPoint,                                      //起点(可指定坐标系)endPoint,                                        //终点(可指定坐标系)NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,       //算路方式true,                                            //真实导航BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略new OnStartNavigationListener() {                //跳转监听@Overridepublic void onJumpToNavigator(Bundle configParams) {Intent intent = new Intent(RouteGuideDemo.this, BNavigatorActivity.class);intent.putExtras(configParams);startActivity(intent);}@Overridepublic void onJumpToDownloader() {}});}private NaviEngineInitListener mNaviEngineInitListener = new NaviEngineInitListener() {public void engineInitSuccess() {mIsEngineInitSuccess = true;}public void engineInitStart() {}public void engineInitFail() {}};private String getSdcardDir() {if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {return Environment.getExternalStorageDirectory().toString();}return null;}


 

 

 

 

 

 


 

 

 

 


 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/593973.html

相关文章

Cesium+Vue实战教程——地图导航

Hello&#xff0c;大家好&#xff0c;这里是在宿舍呆着&#xff0c;避免成为小阳人的GIS宇宙。要说WebGIS比较火的库当初Cesium.js了&#xff0c;基于二维三维地图展示&#xff0c;结合Threejs可以做一些炫酷的特效&#xff0c;常用于智慧城市比如智慧水利、智慧政务等等啊&…

ReactNative实现地图导航

相关源码 同志们好,我又回归了,本来是想分享Flutter相关的内容,但是好久不写文章,感觉生疏了不少,不知道从何处下笔了,所有就把草稿箱躺了快一年的内容整理一下,分享分享。这篇文章是使用最简单的方式实现地图导航的需求,那就是通过唤起手机中的导航类软件进行导航,所…

Android调用跳转百度地图、高德地图、腾讯地图进行目的地导航

Android App跳转百度地图、高德地图、腾讯地图进行目的地导航。 先放上百度、高德、腾讯地图调起API文档地址&#xff0c;有些参数不懂可以参考。 百度地图&#xff1a;http://lbsyun.baidu.com/index.php?titleuri/api/android 高德地图&#xff1a;https://lbs.amap.com/…

socketio连接失败,nginx返回502 connect() failed (111: Connection refused)

现象 我们信控平台&#xff0c;需要实时展示信号灯灯态&#xff08;红黄绿、倒计时等&#xff09; 当灯态变化时&#xff0c;前端信号机设备会通过socket协议将消息推送给我们的通信服务&#xff0c;通信服务将消息解析处理后&#xff0c;关联路口信息&#xff0c;再把信息通过…

服务主机本地系统占cpu_如何通过“服务主机:本地系统(网络受限制)”解决CPU使用率过高的问题

服务主机本地系统占cpu On some Windows 10 PCs, the “Service Host: Local System (Network Restricted)” process group in the Task Manager can use a high amount of CPU, disk, and memory resources. Here’s how to fix it. 在某些Windows 10 PC上, 任务管理器中的“…

原生安卓解决WiFi网络受限以及修改NTP服务器

一. 解决网络受限 1. 通过ADB命令的方式 先删除默认的地址&#xff1a; adb shell settings delete global captive_portal_https_url adb shell settings delete global captive_portal_http_url再修改新的地址&#xff1a; adb shell settings put global captive_portal…

SNMP 计算机网络管理 实验3(二)SNMP协议工作原理验证与分析

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

【python报错】UnicodeEncodeError: ‘ascii‘ codec can‘t encode character ‘\u5b59‘ in position 18: ordinal

报错信息 UnicodeEncodeError: ascii codec cant encode character \u5b59 in position 18: ordinal not in range(128)报错是因为Python默认使用ASCII编码&#xff0c;无法处理非ASCII字符&#xff0c;例如中文字符。为了解决这个问题&#xff0c;可以尝试以下两种方法&#…