百度地图接入导航跟基础定位

####################### 导航功能 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##############
posted @ 2020-06-16 15:34  码弄  阅读(1342)  评论(0编辑  收藏  举报