BMKCycleNavigationManager *manager = [BMKCycleNavigationManager sharedManager];// 0.注册授权代理回调manager.authorizeDelegate = self;manager.calcRouteDelegate = self;manager.routeGuidanceDelegate = self;manager.ttsPlayerDelegate = self;manager.managerDelegate = self;manager.locationAuthorizationDelegate = self;manager.bottomButtonHeight = 70;// 启用后台位置指示器,进入后台时保留被授予的临时访问权限(精确位置)[manager showsBackgroundLocationIndicator:YES];//BMKWalkCycleNavigationDisplayOption *displayOption = [[BMKWalkCycleNavigationDisplayOption alloc] init];BMKMultiNaviViewController *controller = [[BMKMultiNaviViewControlleralloc] init];controller.navigationType = BMK_WALK_CYCLE_NAVIGATION_TYPE_NORMAL_CYCLE;
2.1 授权方案1
// 授权方案1:创建BMKWalkCycleNavigationOptions前,通过BMKCommonInfo设置过公共互联设备ID信息// options.authorizeOption会有默认值// [BMKCommonInfo setCommonShareDeviceID:@"123456789"];BMKWalkCycleNavigationOptions *options = [[BMKWalkCycleNavigationOptionsalloc] init];BMKWalkCycleNavigationDisplayOption *displayOption = [selfdispalyOption];options.displayOption = displayOption;
2.2 授权方案2
// 授权方案2.初始化导航引擎时传入授权信息,创建并设置新的authorizeOptionBMKAuthorizeUserInfo *authorizeUserInfo = [[BMKAuthorizeUserInfoalloc] init];authorizeUserInfo.ak = @"TcpqaFRLCK88zBCvcGw1fqEYysMsoExM";authorizeUserInfo.deviceID = @"123456789";options.authorizeOption = authorizeUserInfo;
BOOL inited = [[BMKCycleNavigationManagersharedManager] initNaviEngine:controller options:options];
if (inited) {NSLog(@"SDK-初始化引擎成功");// 2.创建导航视图多实例BMKMultiNaviView *multiNaviView = [[BMKMultiNaviViewalloc] initWithFrame:CGRectMake(0, 150, 200, 300)];// 3.根据导航视图多实例类型绑定导航数据源 注意:请在BMKWalkCycleAuthorizeDelegate授权代理回调中调用算路接口,否则多实例导航数据将绑定失败BOOL bindFlag = [multiNaviView bindNaviDataSourceWithNaviType:BMK_WALK_CYCLE_NAVIGATION_TYPE_NORMAL_CYCLE];if (bindFlag) {NSLog(@"SDK-多实例导航数据绑定成功");} else {NSLog(@"SDK-多对实例导航数据绑定失败");}/// 多实例展示在合适位置,demo是传给了BMKMultiNaviViewController同屏展示controller.multiNaviView = multiNaviView;///[self.view addSubview:multiNaviView]; 也可以按需求addSubview到任何父视图BMKCycleNaviLaunchParam *param = [[BMKCycleNaviLaunchParamalloc] init];param.startPoint = CLLocationCoordinate2DMake(_startAnnotation.coordinate.latitude, _startAnnotation.coordinate.longitude);param.endPoint = _endAnnotation.coordinate;param.naviType = self.navigationType;// 4.发起导航算路[[BMKCycleNavigationManagersharedManager] routePlanWithParams:param];}
#pragma mark - BMKWalkCycleAuthorizeDelegate/**多实例授权回调,授权失败时会自动解除多实例数据绑定*/- (void)onMultiNaviViewInstanceAuthorizeWithError:(BMKLicenseServiceErrorCode)errorCode serviceType:(BMKAuthorizeServiceType)serviceType {switch (errorCode) {caseBMK_LICENSE_SERVICE_NO_ERROR:NSLog(@"授权成功!多实例同步显示导航信息");break;case BMK_LICENSE_SERVICE_INNER_ERROR:case BMK_LICENSE_SERVICE_NETWOKR_ERROR:case BMK_LICENSE_SERVICE_NETWOKR_TIMEOUT:case BMK_LICENSE_SERVICE_SERVER_ERROR:NSLog(@"网络和服务内部相关错误将不影响本次多实例同步显示导航信息");break;case BMK_LICENSE_SERVICE_NO_PERMISSION:NSLog(@"授权失败!无相关高级权限,请联系商务或PM开通,多实例同步显示导航信息自动断开");break;caseBMK_LICENSE_SERVICE_LICENSE_STATUS_ERROR:NSLog(@"授权失败!lincese授权状态失败,多实例同步显示导航信息自动断开");break;caseBMK_LICENSE_SERVICE_LICENSE_SIGN_ERROR:NSLog(@"授权失败!lincese验签失败,多实例同步显示导航信息自动断开");break;caseBMK_LICENSE_SERVICE_PARAMETER_ERROR:caseBMK_LICENSE_SERVICE_MODE_ERROR:NSLog(@"授权失败!参数异常,多实例同步显示导航信息自动断开");break;caseBMK_LICENSE_SERVICE_NO_QUOTA:caseBMK_LICENSE_SERVICE_QUOTA_NO_ENOUGH:caseBMK_LICENSE_SERVICE_QUOTA_INVALID:NSLog(@"授权失败!设备lincese配额异常,多实例同步显示导航信息自动断开");break;default:NSLog(@"未知异常,多实例同步显示导航信息自动断开");break;}}
以BMKMultiNaviViewController生命周期为参考
- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];// 0.添加多实例View[self.view addSubview:self.multiNaviView];if (self.navigationType == BMK_WALK_CYCLE_NAVIGATION_TYPE_WALK) {// 1.步行导航恢复[[BMKWalkNavigationManager sharedManager] resume];} else {//1. 骑行导航恢复[[BMKCycleNavigationManager sharedManager] resume];}// 2.恢复多实例导航View[self.multiNaviView onResume];}- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];if (self.navigationType == BMK_WALK_CYCLE_NAVIGATION_TYPE_WALK) {// 3.步行导航暂停[[BMKWalkNavigationManager sharedManager] pause];} else {// 3.骑行导航暂停[[BMKCycleNavigationManager sharedManager] pause];}// 4.暂停多实例导航View[self.multiNaviView onPause];}- (void)viewDidDisappear:(BOOL)animated {// 5.移除多实例导航view[self.multiNaviView removeFromSuperview];// 6.销毁多实例导航view[self.multiNaviView onDestroy];if (self.navigationType == BMK_WALK_CYCLE_NAVIGATION_TYPE_WALK) {// 7.停止步行导航[[BMKWalkNavigationManager sharedManager] stop];// 8.销毁步行导航manager[BMKWalkNavigationManager destroy];} else {// 7.停止骑行导航[[BMKCycleNavigationManager sharedManager] stop];// 8.销毁骑行导航manager[BMKCycleNavigationManager destroy];}}
上一篇
下一篇
本篇文章对您是否有帮助?