Android百度地图导航的那些坑

标签: android百度地图导航   9720人阅读  评论(13)  收藏  举报   分类: Android(39) 
  1. 首先要先在AndroidManifest.xml中注册导航服务

  2. 添加相关的权限,我也不知道哪些是必须的,我直接把Demo里面的相关权限配置全部拉过来了

  3. 在导航之前要先调用BaiduNaviManager.getInstance().initEngine对导航引擎进行初始化。可以通过NaviEngineInitListener接口检查导航引擎初始化是否成功,同时通过LBSAuthManagerListener接口对API-Key进行Key校验是否成功,status结果为0代表key校验成功。

  4. 必须将Demo中assert目录下的两个文件BaiduNaviSDK_Resource_v1_0_0.pngchannel拷贝到自己项目的assert目录下去,否则导航引擎无法初始化成功。

  5. 在导航引擎初始化成功后,调用导航功能前调用BaiduNaviManager.getInstance().checkEngineStatus(context)检测导航引擎是否初始化成功。

  6. 调用BaiduNaviManager.getInstance().launchNavigator开始导航

相关代码如下:

//导航
public static void launchNavi(final Activity activity, List points ){
if(points.size() < 2) {
Toast.makeText(activity, "数据不合法,暂时无法导航", Toast.LENGTH_SHORT).show();
return;
}
BaiduNaviManager.getInstance().launchNavigator(activity,
points, //路线点列表
NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME, //算路方式
false, //真实导航
BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略
new OnStartNavigationListener() { //跳转监听
@Override
public void onJumpToNavigator(Bundle configParams) {
Intent intent = new Intent(activity, NaviBdMapActivity.class);
intent.putExtras(configParams);
activity.startActivityForResult(intent,REQUESTCODE_NAVI_FINISH);
}
@Override
public void onJumpToDownloader() {
}
}
);
}



//初始化引擎
public static void initNaviEngine(final Activity activity) {
BaiduNaviManager.getInstance().initEngine(activity, Utils.getRootPath(),
new SPMNaviEngineInitListener(), new LBSAuthManagerListener() {
@Override
public void onAuthResult(int status, String msg) {
String str = null;
if (0 == status) {
str = "key校验成功!";
} else {
str = "key校验失败, " + msg;
}
}
}
);
}

private static class SPMNaviEngineInitListener implements NaviEngineInitListener {

public void engineInitSuccess() {
Log.i("Navi", "导航初始化成功");
}

public void engineInitStart() {
}

public void engineInitFail() {
Log.i("Navi", "导航初始化失败");
}
};

`

public class NaviBdMapActivity extends Activity {

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // 创建NmapView
    if (Build.VERSION.SDK_INT < 14) {
        BaiduNaviManager.getInstance().destroyNMapView();
    }
    MapGLSurfaceView nMapView = BaiduNaviManager.getInstance().createNMapView(this);

    // 创建导航视图
    View navigatorView = BNavigator.getInstance().init(
            NaviBdMapActivity.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(thisnew IJumpToDownloadListener() {
                @Override
                public void onJumpToDownloadOfflineData() {

                }
            }));

}

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) {
            finishActivity();
        } else if (IBNavigatorListener.PAGE_JUMP_WHEN_ROUTE_PLAN_FAIL == jumpTiming) {
            finishActivity();
        }
    }

    @Override
    public void notifyGPSStatusData(int arg0) {

    }

    @Override
    public void notifyLoacteData(LocData arg0) {

    }

    @Override
    public void notifyNmeaData(String arg0) {

    }

    @Override
    public void notifySensorData(SensorData arg0) {

    }

    @Override
    public void notifyStartNav() {
        BaiduNaviManager.getInstance().dismissWaitProgressDialog();
    }

    @Override
    public void notifyViewModeChanged(int arg0) {

    }

};

@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();
}

public void finishActivity() {
    finish();
    overridePendingTransition(R.anim.in_from_right,R.anim.out_to_left);
}
}

更多相关文章

  1. Android(安卓)Init Language(安卓初始化语言)
  2. Android(安卓)中导航栏文字居中
  3. Android回炉系列之Surfaceflinger
  4. android TabHost小结
  5. android TabHost小结
  6. Android开发者网址导航
  7. Android(安卓)UI详解之动态布局
  8. android实现定时拍照并发送微博功能
  9. Android(安卓)简单的账号密码登陆界面(IO流)

随机推荐

  1. 详解数据库多表连接查询的实现方法
  2. Centos7.3下mysql5.7安装配置教程
  3. 详解MySQL导出指定表中的数据的实例
  4. MySQL无法启动的解决办法
  5. MySQL curdate()函数的实例详解
  6. 详解java调用ffmpeg转换视频格式为flv
  7. MySQL5.5.27安装图文教程
  8. 基于Mysql的Sequence实现方法
  9. MySQL5.7免安装版配置图文教程
  10. 连接MySQL时出现1449与1045异常解决办法