浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 导航SDK

百度Andriod 导航SDK为Android移动端应用提供了一套简单易用的导航服务接口,适用于Android 2.1及以上版本。专注于为广大开发者提供最好的导航服务,通过使用百度导航SDK,开发者可以轻松为应用程序实现专业、高效、精准的导航功能。

简介

通过输入起点,终点或途经点,可以发起路线规划,并进入导航。算路支持多种坐标系(参考BNRoutePlanNode.CoordinateType),和多种偏好(参考RoutePlanPreference)

1 发起算路

算路设置起、终点,算路偏好,是否模拟导航等参数,然后在回调函数中设置跳转至诱导。

 private void routeplanToNavi(CoordinateType coType) {
    BNRoutePlanNode sNode = null;
    BNRoutePlanNode eNode = null;
	switch(coType) {
		case GCJ02: {
			sNode = new BNRoutePlanNode(116.30142, 40.05087, 
		    		"百度大厦", null, coType);
			eNode = new BNRoutePlanNode(116.39750, 39.90882, 
		    		"北京天安门", null, coType);
			break;
		}
		case WGS84: {
			sNode = new BNRoutePlanNode(116.300821,40.050969,
		    		"百度大厦", null, coType);
			eNode = new BNRoutePlanNode(116.397491,39.908749, 
		    		"北京天安门", null, coType);
			break;
		}
		case BD09_MC: {
			sNode = new BNRoutePlanNode(12947471,4846474,  
		    		"百度大厦", null, coType);
			eNode = new BNRoutePlanNode(12958160,4825947,  
		    		"北京天安门", null, coType);
			break;
		}
                case BD09LL: {
                        sNode = new BNRoutePlanNode(116.30784537597782,
                          40.057009624099436, "百度大厦", null, coType);
                        eNode = new BNRoutePlanNode(116.40386525193937, 
                         39.915160800132085, "北京天安门", null, coType);
                        break;
               }
		default : ;
	}
	if (sNode != null && eNode != null) {
        List<BNRoutePlanNode> list = new ArrayList<BNRoutePlanNode>();
        list.add(sNode);
        list.add(eNode);
        BaiduNaviManager.getInstance().launchNavigator(this, list, 1, true, new DemoRoutePlanListener(sNode));
	}
}

public class DemoRoutePlanListener implements RoutePlanListener {
	
	private BNRoutePlanNode mBNRoutePlanNode = null;
	public DemoRoutePlanListener(BNRoutePlanNode node){
		mBNRoutePlanNode = node;
	}
	
	@Override
	public void onJumpToNavigator() {
		 Intent intent = new Intent(BNDemoMainActivity.this, BNDemoGuideActivity.class);
		 Bundle bundle = new Bundle();
		 bundle.putSerializable(ROUTE_PLAN_NODE, (BNRoutePlanNode) mBNRoutePlanNode);
		 intent.putExtras(bundle);
         startActivity(intent);
	}
	@Override
	public void onRoutePlanFailed() {
		// TODO Auto-generated method stub
		
	}
}               
2 开始导航

创建诱导View,并接收回调事件。在activity生命周期内调用诱导BNRouteGuiderManager对应的生命周期函数。

@Override        
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	createHandler();
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {}
	View view = BNRouteGuideManager.getInstance().onCreate(this, new OnNavigationListener() {
		
		@Override
		public void onNaviGuideEnd() {
			finish();
		}
		
		@Override
		public void notifyOtherAction(int actionType, int arg1, int arg2, Object obj) {
			
		}
	});
	
	if ( view != null ) {
		setContentView(view);
	}
	
	Intent intent = getIntent();
	if (intent != null) {
		Bundle bundle = intent.getExtras();
		if (bundle != null) {
		    mBNRoutePlanNode = (BNRoutePlanNode) bundle.getSerializable(BNDemoMainActivity.ROUTE_PLAN_NODE);
		}
	}
}

@Override
protected void onResume() {
	BNRouteGuideManager.getInstance().onResume();
	super.onResume();
	
	hd.sendEmptyMessageDelayed(MSG_SHOW, 5000);
}

protected void onPause() {
	super.onPause();
	BNRouteGuideManager.getInstance().onPause();
};

@Override
protected void onDestroy() {
	BNRouteGuideManager.getInstance().onDestroy();
	super.onDestroy();
}

@Override
protected void onStop() {
    BNRouteGuideManager.getInstance().onStop();
    super.onStop();
}

@Override
public void onBackPressed() {
	BNRouteGuideManager.getInstance().onBackPressed(false);
}

public void onConfigurationChanged(android.content.res.Configuration newConfig) {
	BNRouteGuideManager.getInstance().onConfigurationChanged(newConfig);
	super.onConfigurationChanged(newConfig);
};  
3 导航中设置播报模式

导航中可以设置语音播报的模式,包括新手,老手,和静音三种模式。

BNRouteGuideManager.getInstance().setVoiceModeInNavi(VoiceMode.Quite); 

播报模式设置界面如下图:

voicemode.png

4 导航中重新设置终点并直接算路导航

导航中如果需要重新设置终点时,可以调用重置终点接口。

BNRouteGuideManager.getInstance().resetEndNodeInNavi(endNode);
5 强制退出导航

导航中需要强制退出时,调用下面接口,该接口将不会显示对话框。

BNRouteGuideManager.getInstance().forceQuitNaviWithoutDialog();