百度地图导航Demo
1). 开发环境配置:
在新建的Android工程下的libs文件夹内添加百度导航SDK 的jar包:galaxy_mini.jar,android_api_1.1_forsdk.jar,BaiduLBS_Android.jar;在libs文件夹下新建armeabi文件夹,并导入下载相关的.so包:libapp_BaiduNaviApplib_v1_0_0.so,libCNPackage.so,libejTTS.so,liblocnaviSDK.so。(这是下载带有TTS的)
BaiduMapNaviSDK.rar
资源包:
2). 在Android工程的Manifest.xml文件中的配置:
a. 在
android:value = "您为这个Android工程申请的百度地图key"/> android:enable = "true" /> b. 添加使用百度导航sdk的权限: android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> android:name="android.permission.BAIDU_LOCATION_SERVICE"/> android:name="android.permission.ACCESS_NETWORK_STATE"/> android:name="android.permission.ACCESS_COARSE_LOCATION"/> android:name="android.permission.ACCESS_FINE_LOCATION"/> android:name="https://www.doczj.com/doc/f94577534.html,uncher.permission.READ_SETTINGS"/> android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 3). 代码实现部分: a. 在app入口Activity(第一个Activity)中初始化导航引擎: public calss MainActivity extends ACtivity{ private boolean mIsEngineInitSuccess = false; private NaviEngineInitListener mListener = new NaviEngineInitListener(){ @Override public void engineInitFail(){} @Override public void engineInitStart(){} @Override public void engineInitSuccess(){mIsEngineInitSuccess = true;} }; private String getSdcardDir(){ if(Environment.getExternalStorageState().equalsIgnoreCase( Environment.MEDIA_MOUNTED)){ return Environment.getExternalStorageDirectory().toString(); } return null; } @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/f94577534.html,yout.activity_main); //初始化导航引擎2种方法 //第一种:末尾参数为null BaiduNaviManager.getInstance().initEngine(this, getSdcardDir(), mListener, null); //第二种:末尾参数不为null BaiduNaviManager.getInstance().initEngine(this, getSdcardDir(), mListener, new LBSAuthManager(){ @Override public void onAuthResult(int status, String msg){ String str = null; if(status == 0) str ="key校验成功"; else str = "key校验成功" + msg; Log.v("KEY_STATUS", str); } }); //前往导航页的button Button naviPageBtn = (Button)findViewById(R.id.navi_page); naviPageBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent(MainActivity.this, RouteGuideDemoActivity.class); startActivity(intent); } }); } } b. activty_main.xml文件的内容: "https://www.doczj.com/doc/f94577534.html,/apk/res/android" android:layout_width = "fill_parent" android:layout_height = "fill_parent" android:orientation = "vertical"> c. 配置导航结果显示页: 具体方法步骤:右键你的工程包->New->Class->填写class名字(下面的有一个Superclass属性填写为android.app.Activity).如下图: PS:此页不需要配置.xml文件 在Manifest.xml文件的 android:configChanges = "orientation|screenSize|keyboard|keyboardHidden"/> BNavigatorActivity.class文件: public class BNavigatorActivity extends Activity{ private IBnavigatorListener mListener = new IBnavigatorListener(){ @Override public void ontifyGPSStatusData(int arg0){} @Override public void ontifyLocateData(LocData arg0){} @Override public void ontifyNmeaData(String arg0){} @Override public void ontifySensorData(SensorData arg0){} @Override public void ontifyStartNav(){ BaiduNaviManager.getInstance().dismissWaitProgressDialog(); } @Override public void ontifyViewModeChanged(int arg0){} @Override public void onPageJump(int times, Object arg0){ //页面跳转回调 if(IBNavigatorListener.PAGE_JUMP_WHEN_GUIDE_END == times) finish(); else if(IBNavigatorListener.PAGE_JUMP_WHEN_ROUTE_PLAN_FAIL == times) finish(); } @Override public void onYawingRequestStart(){} @Override public void onYawingRequestSuccess(){} }; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //创建NMapView MapGLSurfaceView nMapView = BaiduNaviManager.getInstance(). createNMapView(getApplicationContext()); //创建导航视图 View navigatorView = BNavigator.getInstance().init(this, getIntent().getExtras(), nMapView); //填充视图 setContentView(navigatorView); BNavigator.getInstance().setListener(mListener); BNavigator.getInstance().startNav(); //初始化TTS,可以使用非百度导航sdk提供的tts BNTTSPlayer.initPlayer(); //设置TTS播放回调 BNavigatorTTSPlayer.setTTSPlayerListener(new IBNTTSPlayerLister(){ @Override public int playTTSText(String str, int arg){ return BNTTSPlayer.playTTSText(str, arg); } @Override public void phoneHangUp(){} @Override public void phoneCalling(){} @Override public int getTTSState() {return BNTTSPlayer. getTTSState(); } }); BNRoutePlanner.getInstance().setObserver( new RoutePlanObserver(this, new iJumpToDownloadListener(){ @Override public void onJumpToDownloadOfflineData(){} })); } //重写管理api:onPause(), onResume, onDestroy(), onBackPressed() @Override public void onResume(){ BNavigator.getInstance().resume(); super.onResume(); BNMapController.getInstance().onResume(); } @Override public void onResume(){ BNavigator.getInstance().pause(); super.onPause(); BNMapController.getInstance().onPause(); } @Override public void onDestroy(){ BNavigator.destroy(); BNRoutePlanner.getInstance().setObserver(null); super. onDestroy (); } @Override public void onBackPressed(){ BNavigator.getInstance().onBackPressed (); } } d. 发起导航页的Activity(RouteGuideDemoActivity) .xml文件: "https://www.doczj.com/doc/f94577534.html,/apk/res/android" android:layout_width = "fill_parent" android:layout_height = "fill_parent" android:orientation = "vertical"> .class public class RouteGuideDemoActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/f94577534.html,yout.activity_route_guide_demo); Button startBtn = (Button)findViewById(R.id.start_btn); startBtn.setOnClickListener(new SelfBtnClickListener()); } private class SelfBtnClickListener implements OnClickListener(){ @Override public void onClick(View v){ switch(v.getId()){ case R.id.start_btn: selfLaunchNavigator(); break; default: break; } } } private void selfLaunchNavigator(){ BaiduNaviManager.getInstance().launchNavigator(this, 40.06803, 116.30142, "百度大厦", //起始点 39.90882, 116.39750, "天安门", //终点 RoutePlan_Mode.ROUTE_PLAN_MODE_MIN_TIME, //算路方式 true, //真实导航(true or false)BaiduNaviManager.STRATEGY_FORCE_ONLINE_FRIORIT, //在离线策略 new OnStartNavigationListener(){ //跳转监听@Override public void onJumpToNavigator(Bundle bundle){ Intent intent = new Intent(RouteGuideDemoActivity.this, BNavigatorActivity.class); intent.putExtras(bundle); startActivity(intent); } @Override public void onJumpToDownloader(){} }); } }