百度地图接入导航跟基础定位
####################### 导航功能 start##############################
1、先去百度开发者中心获取key 参考文档
代码方面比较简单参考文档写就行。主要是sdk集成过程按照你的需求将对应的aar还有jar都塞进去不然初始化会直接崩溃(不知道是我的方法不对还是。。。)至于jnilibs肯定是都得放进去
2、放入jar包aar跟jar都往进放还有jnilibs 下面是我导入的jar跟aar jnilib里面的去官网下载
BaiduLBS_aar_android_V1.2.0_32.aar
galaxy_lite_lbs_v2.3.jar
galaxy_lite_v2.3.jar
NaviTts.aar
onsdk_all.aar
3、完事之后根据文档初始化导航还有语音播报 内置语音播报需要去 http://yuyin.baidu.com/ 搞一个appid
//初始化导航 BaiduNaviManagerFactory.getBaiduNaviManager().init(this,getSdcardDir(), APP_FOLDER_NAME,this); //初始化内置语音 BaiduNaviManagerFactory.getTTSManager().initTTS(this,getSdcardDir(), APP_FOLDER_NAME, "tts appid"); // 注册同步内置tts状态回调 BaiduNaviManagerFactory.getTTSManager().setOnTTSStateChangedListener( this); // 注册内置tts 异步状态消息 BaiduNaviManagerFactory.getTTSManager().setOnTTSStateChangedHandler( this);
在初始化的activity中实现 implements IBaiduNaviManager.INaviInitListener 开始授权 好像有三个函数
@Override public void initStart() { ToastUtils.show("百度地图授权开始"); } @Override public void initSuccess() { ToastUtils.show("授权校验成功"); // 经纬度 BNRoutePlanNode sNode = new BNRoutePlanNode.Builder() .latitude(MainActivity.mCurrentLat) .longitude(MainActivity.mCurrentLng) .name("当前位置") .description("当前位置") .coordinateType(BNRoutePlanNode.CoordinateType.GCJ02) .build(); BNRoutePlanNode eNode = new BNRoutePlanNode.Builder() .latitude(37.8605) .longitude(112.587624) .name("") .description("") .coordinateType(BNRoutePlanNode.CoordinateType.GCJ02) .build(); List<BNRoutePlanNode> list = new ArrayList<>(); list.add(sNode); list.add(eNode); BaiduNaviManagerFactory.getRoutePlanManager().routeplanToNavi( list, IBNRoutePlanManager.RoutePlanPreference.ROUTE_PLAN_PREFERENCE_DEFAULT, null, new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { LogUtil.e("算路" + msg.what); switch (msg.what) { case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_START: Toast.makeText(NavActivity.this.getApplicationContext(), "算路开始", Toast.LENGTH_SHORT).show(); break; case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_SUCCESS: Toast.makeText(NavActivity.this.getApplicationContext(), "算路成功", Toast.LENGTH_SHORT).show(); break; case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_FAILED: Toast.makeText(NavActivity.this.getApplicationContext(), "算路失败", Toast.LENGTH_SHORT).show(); break; case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_TO_NAVI: Toast.makeText(NavActivity.this.getApplicationContext(), "算路成功准备进入导航", Toast.LENGTH_SHORT).show();//下面为驾车页设置 其他的可以去百度文档瞅瞅 IBNOuterSettingManager.IBNRouteResultSetting routeResultSettingManager = BaiduNaviManagerFactory.getRouteResultSettingManager(); routeResultSettingManager.isRealRoadConditionOpen(); routeResultSettingManager.setRouteMargin(0, 0, 0, 0); Intent intent2 = new Intent(NavActivity.this, MyGuideActivity.class); startActivity(intent2); finish(); break; default: // nothing break; } } }); } @Override public void initFailed(int i) { ToastUtils.show("授权校验失败" + i); }
4、写一个空的GuideActivity做导航界面 实现对应的生命周期 onCreate这里会返回一个view直接serContentView就完事了
private IBNRouteGuideManager manager; manager = BaiduNaviManagerFactory.getRouteGuideManager();
Bundle bundle = new Bundle(); // IS_REALNAVI代表导航类型,true表示真实导航,false表示模拟导航,默认是true bundle.putBoolean(BNaviCommonParams.ProGuideKey.IS_REALNAVI, true); // IS_SUPPORT_FULL_SCREEN代表是否沉浸式,默认是true bundle.putBoolean(BNaviCommonParams.ProGuideKey.IS_SUPPORT_FULL_SCREEN, true); View view = manager.onCreate(this,IBNRouteGuideManager.OnNavigationListener, bundle); if (view != null) { setContentView(view); }
//这里还有俩监听可以查看一下官网
manager.setNaviListener(naviListener);
manager.setNaviViewListener(ibNaviViewListener);
//余下的生命周期都有d都需要实现 @Override protected void onStart() { super.onStart(); manager.onStart(); } @Override protected void onResume() { super.onResume(); manager.onResume(); } @Override protected void onPause() { super.onPause(); manager.onPause(); } @Override protected void onStop() { super.onStop(); manager.onStop(); } @Override protected void onDestroy() { super.onDestroy(); manager.onDestroy(true); }
###################### 导航功能 end#######################
#################### 定位功能 start#############################
// /** // * 初始化定位参数配置 // */ // private void initLocationOption() { LogUtil.e("initLocationOption--"); //定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动 LocationClient locationClient = new LocationClient(MainActivity.this); //声明LocationClient类实例并配置定位参数 LocationClientOption locationOption = new LocationClientOption(); MyLocationListener myLocationListener = new MyLocationListener(); //注册监听函数 locationClient.registerLocationListener(myLocationListener); //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 locationOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; locationOption.setCoorType("gcj02"); //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的 locationOption.setScanSpan(1000); //可选,设置是否需要地址信息,默认不需要 locationOption.setIsNeedAddress(true); //可选,设置是否需要地址描述 locationOption.setIsNeedLocationDescribe(true); //可选,设置是否需要设备方向结果 locationOption.setNeedDeviceDirect(false); //可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 locationOption.setLocationNotify(true); //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 locationOption.setIgnoreKillProcess(true); //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” locationOption.setIsNeedLocationDescribe(true); //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 locationOption.setIsNeedLocationPoiList(true); //可选,默认false,设置是否收集CRASH信息,默认收集 locationOption.SetIgnoreCacheException(false); //可选,默认false,设置是否开启Gps定位 locationOption.setOpenGps(true); //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用 locationOption.setIsNeedAltitude(false); //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者 locationOption.setOpenAutoNotifyMode(); //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者 locationOption.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT); //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用 locationClient.setLocOption(locationOption); //开始定位 locationClient.start(); } /** * 实现定位回调 */ public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果 //以下只列举部分获取经纬度相关(常用)的结果信息 //更多结果信息获取说明,请参照类参考中BDLocation类中的说明 int errorCode = location.getLocType(); LogUtil.e("错误码---initLocationOption" + errorCode); //获取纬度信息 mCurrentLat = location.getLatitude(); //获取经度信息 mCurrentLng = location.getLongitude(); LogUtil.e("当前经纬度信息:" + mCurrentLng + mCurrentLat); //获取定位精度,默认值为0.0f float radius = location.getRadius(); //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准 String coorType = location.getCoorType(); //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明 } }
################### 定位功能 end##############
最简单的教养,就是适当地回避别人的难堪。