只说步骤
大牛们看着不要笑就好
主页面的布局里面就一个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。
不带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() { @Override public 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() { @Override public 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() { //跳转监听 @Override public void onJumpToNavigator(Bundle configParams) { Intent intent = new Intent(RouteGuideDemo.this, BNavigatorActivity.class); intent.putExtras(configParams); startActivity(intent); } @Override public 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() { //跳转监听 @Override public void onJumpToNavigator(Bundle configParams) { Intent intent = new Intent(RouteGuideDemo.this, BNavigatorActivity.class); intent.putExtras(configParams); startActivity(intent); } @Override public 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; }