百度地图API如何选择,以及关于百度地图的SDK的使用,可以参考我之前的一篇文章http://blog.sina.com.cn/s/blog_68661bd80101k4rx.html 在那篇的教程中已经讲解过如何申请百度密钥,这里就不再细说。
     导航的功能其实较专一和简单。一般项目使用导航SDK的都是使用当前手机位置到目的地的语音导航。所以掌握这个,也就掌握了整个百度导航SDK。
       百度导航:通过调用导航SDK接口,您可以轻松访问百度导航的服务和数据,构建功能丰富、交互性强的导航类应用程序。百度导航功能:1.GPS导航 2.路线全览  3.文字导航 4.HUD导航  5.语音播报 6.实时路况   7.路线规划 8.GPS巡航。从整个功能上来说,就比地图SDK多两个功能:第一,语音导航。由第三条和第五条组成。第二,加了导航界面,提前的路况查询。路线规划这些功能地图SDK已经有了,所以说白了导航SDK只是地图SDK的补充。主要由于地图SDK没有语音导航功能才开发的导航SDK。
       在自己项目中使用百度导航SDK的步骤:
       第一步:申请密钥。http://lbsyun.baidu.com/apiconsole/key 。在这里也回答一个朋友的问题,能否在同一个工程中同时使用导航SDK和地图SDK。答案是可以的。下面是百度官方的截图。
     第二步:下载SDK。百度导航SDK的下载地址http://developer.baidu.com/map/index.php?title=ios-navsdk/sdkios-nav-download 下载的包有开发文档和SDK以及demo程序。
      第三步:根据申请密钥时的bundleindentifer创建一个项目。我的项目名为csctest,因为我写的项目的签名为com.calinks.csctest。将当前最新SDK文件夹BaiduNavi_iOSSDK_v2.0.4_Lib加入到项目中,如果此刻运行程序会出现错误。因为现在项目一般都是用ARC,而导航SDK中提供的TouchJSON是非ARC编译选项。所以要在BuildPhases的Compile Sources中关于TouchJSON的文件的CompilerFlags添加-fno-objc-arc。

    第四步:加入库的头文件。此时运行程序不会报错。接下来一般的思路就是加入库的头文件,在AppDelegate.m中加入
#import "BNCoreServices.h"。
在- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions中加入

[BNCoreServices_InstanceinitServices:@"itIDWOfDPlQo5camfY5GeqOK"];

[BNCoreServices_InstancestartServicesAsyn:nilfail:nil];

此时运行,会有一百多个错误。因为需要加入导航SDK的一些依赖库。必须加入CoreTelephony.framework,libstdc++.6.0.9.tbd,

AVFoundation.framework,CoreMotion.framework,ImageIO.framework,AudioToolbox.framework,SystemConfiguration.framework。

再运行发现还是有错,因为语法错误。

_OBJC_CLASS_$_NSManagedObjectModel", referenced from:

objc-class-ref in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

"_OBJC_CLASS_$_NSFetchRequest", referencedfrom:

objc-class-ref in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

"_OBJC_CLASS_$_NSManagedObjectContext",referenced from:

objc-class-ref in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

"_OBJC_CLASS_$_NSPersistentStoreCoordinator",referenced from:

objc-class-ref in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

"_OBJC_CLASS_$_NSAttributeDescription",referenced from:

objc-class-ref in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

"_OBJC_CLASS_$_NSEntityDescription", referencedfrom:

objc-class-ref in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

"_NSSQLiteStoreType", referenced from:

-[BDETTSCoreDataHelper setupPersistentStore] inlibbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

ld: symbol(s) not found for architecture armv7

clang: error: linker command failed with exit code 1 (use -v to seeinvocation)

因为导航SDK的语法关系,需要在BuildSettings中, “Other Linker Flags”添加“-ObjC”标识。再运行,程序就没有问题了。注意添加时,O和C是大写,一个字母不对就会出错。

第五步:设置info.plist。一般思路,接下来当然是加导航代码,但是还得意识到一个问题,导航需要定位,因为真正的导航是从自己当前位置为起点的。

为了对iOS8的定位能力做兼容,做了相应的修改,开发者在使用过程中注意事项如下:需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):

NSLocationWhenInUseUsageDescription,允许在前台使用时获取GPS的描述

NSLocationAlwaysUsageDescription,允许永久使用GPS的描述。

还有一点,导航要能在后台一直运行。需要加入

如果仍有以下问题:

请依照下图解决::

    第六步:注意初始化失败的问题。加入导航代码时,不要在程序启动时立即直接进入导航功能,因为导航初始化需要时间,在实际情况下也不需要程序启动时立即进入导航功能,因为要输入终点。所以,我建议写一个按钮,点击再进入导航。以免提示@"引擎尚未初始化完成,请稍后再试"
   第七步:导航的功能代码
             在ViewController.m中加入
#import"BNCoreServices.h",#import"BNRoutePlanModel.h",#import"BNCoreServices.h"。实现<</span>BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate>两个委托方法。主要代码

//发起导航

- (void)startNavi

{

//节点数组

NSMutableArray*nodesArray = [[NSMutableArrayalloc]  initWithCapacity:2];

//起点

BNRoutePlanNode *startNode= [[BNRoutePlanNode alloc]init];

startNode.pos= [[BNPositionalloc]init];

startNode.pos.x=113.936392;

startNode.pos.y=22.547058;

startNode.pos.eType=BNCoordinate_BaiduMapSDK;

[nodesArrayaddObject:startNode];

//终点

BNRoutePlanNode *endNode= [[BNRoutePlanNode alloc]init];

endNode.pos= [[BNPositionalloc]init];

endNode.pos.x=114.077075;

endNode.pos.y=22.543634;

endNode.pos.eType=BNCoordinate_BaiduMapSDK;

[nodesArrayaddObject:endNode];

//发起路径规划

[BNCoreServices_RoutePlanstartNaviRoutePlan:BNRoutePlanMode_RecommendnaviNodes:nodesArraytime:nildelegete:selfuserInfo:nil];

}

//算路成功回调

-(void)routePlanDidFinished:(NSDictionary*)userInfo

{

NSLog(@"算路成功");

//路径规划成功,开始导航

[BNCoreServices_UIshowNaviUI:BN_NaviTypeReal delegete:selfisNeedLandscape:YES];

}

//算路失败回调

- (void)routePlanDidFailedWithError:(NSError*)error andUserInfo:(NSDictionary*)userInfo

{

NSLog(@"算路失败");

if([errorcode]== BNRoutePlanError_LocationFailed){

NSLog(@"获取地理位置失败");

}

elseif([errorcode]== BNRoutePlanError_LocationServiceClosed)

{

NSLog(@"定位服务未开启");

}

}

//算路取消回调

-(void)routePlanDidUserCanceled:(NSDictionary*)userInfo{

NSLog(@"算路取消");

}

#pragma mark - BNNaviUIManagerDelegate

//退出导航回调

-(void)onExitNaviUI:(NSDictionary*)extraInfo

{

NSLog(@"退出导航");

}

- (IBAction)StartNavAction:(id)sender{

if(![selfcheckServicesInited])return;

_naviType =BN_NaviTypeReal;

[selfstartNavi];

}

 第八步:百度语音授权。http://app.navi.baidu.com/ttsregister/appinfo然而就在信心满满,以为可以语音导航的时候,突然弹出个提示并没有语音导航功能出来。因为还需要一个百度语音授权。填写BundleId和对应的密钥AK,再运行程序,就可以正常使用了。
源代码已经放到QQ群共享:460325065。
朋友的问题:
关于3G网络下跳转到如下界面,而WIFI不会跳转的现象。3G网络下每次导航时会先跳到那个页面大概1秒钟,然后再跳进导航页面。关闭导航后,会返回那个页面,点击一下后才会返回到app中去。而跳转到下载页面的情况是可以屏蔽的。
我觉得这是百度对用户流量的保护。进入下面页面是给用户一个选择,因为百度APP是有离线功能包的,能极大介绍流量消耗。目前从API以及功能描述来看,并没有给出去掉这个界面的办法。
还有朋友下载了我的DEMO程序,然后改成自己的签名和密钥,在运行程序时会出现下面提示,TTS授权失败,无法使用TTS,是否发起发起算路进入导航。出现这个提示的原因还是第八步没做。

如何注册百度地图的语音导航授权?通过下图就可以知道了

iOS开发百度导航SDK的使用入门相关推荐

  1. iOS之百度导航SDK的坐标转换

    1 百度导航 iOS SDK的坐标转换代码示例,有需要的朋友可以参考下. 2 3 4 5 //导航坐标--------------> 地图坐标 6 7 8 //假设从导航sdk取到了一个点坐标是 ...

  2. IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应

    (转)IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油 ...

  3. IOS开发百度地图API-用点生成路线,导航,气泡响应

    原地址:http://blog.sina.com.cn/s/blog_68661bd80101k4rx.html IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发 ...

  4. 转:IOS开发百度地图API-用点生成路线,导航,气泡响应

    IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地图视角跳到用户当前位置 IOS百度地图开发实时路况 IO ...

  5. ios 开发百度地图的使用

    IOS开发百度地图API-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地 ...

  6. IOS开发百度地图API

    IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地图视角跳到用户当前位置 IOS百度地图开发实时路况 IO ...

  7. Android 使用百度导航SDK 2,并发编程挑战

    效果: 使用百度导航SDK,首先需要获取的信息有: 1.起始位置的经纬度,地名 2.终点的经纬度,地名 3.起始点经纬度所使用的坐标系类型(CoordinateType ) 参数如下: private ...

  8. IOS开发基础之OC的Block入门_Day09-Block

    IOS开发基础之OC的Block入门_Day09-Block block是oc的重要的基础知识,重点之重.跟协议一样重要,是进行函数回调重要手段.在后续的UI学习具有举足轻重的地位.学会基础的bloc ...

  9. 华为百度导航Sdk黑屏

    某些华为机型在使用百度导航sdk时黑屏如下图,解决办法,把targetSdkVersion 设置成21就行了 targetSdkVersion 21

  10. iOS开发实时监控SDK的设置

    iOS开发实时监控SDK的设置 *本文中涉及的实时监控为"维迈开放平台" 相关API,硬件设备为"金盛安防"监控摄像头(https://open.xmeye.n ...

最新文章

  1. Linux下多网卡MAC配置问题
  2. Java集合:List转数组互转
  3. portainer容器可视化管理部署简要笔记
  4. python 3d渲染_python老司机带你玩玩炫酷的3D渲染,酷毙了!
  5. 潜伏者与谍报密码(洛谷P1071题题解,Java语言描述)
  6. 梦聆轻量化音乐播放器源码
  7. 《上海堡垒》改编电影发布 QQ阅读披露作者江南心声
  8. 自学了三个月的软件测试,从小白到自动化测试工程师,我是如何从零拿到大厂offer的
  9. myeclipse 内存不够用报错PermGen space 和 An internal error has occurred.
  10. ajax无刷新提交表,Ajax无刷新提交表单和显示
  11. 后台处理客户端控件上传的文件(input type=file)
  12. CI/CD:DevOps背后的推动力
  13. 二进制空间权重矩阵_Stata_ 空间权重矩阵的构建
  14. VB6-Mini_20160110(VB6精简版下载)
  15. 移动增值短信平台实施计划方案(珠海报业短信)
  16. Java之String系列--intern方法的作用及原理
  17. anaconda安装多环境
  18. U3D Animator 组件控制动画的播放暂停,动态添加帧事件
  19. 解析几何 曲线与二次曲面 直纹面(2.4)
  20. bzoj1645 / P2061 [USACO07OPEN]城市的地平线City Horizon(扫描线)

热门文章

  1. 前端面试,面试官会问些啥...
  2. 解决Ubuntu环境搜狗拼音候选区乱码问题
  3. vue读取地址栏参数
  4. JavaScript 修改地址栏指定参数
  5. E - Enigma Gym - 101889E dp求可除一个整数的最小数
  6. 前端优化之减少HTTP请求
  7. ubuntu下安装vmware workstation
  8. 笔记本安装windows系统全流程(附上遇到常见问题解决办法)
  9. 第一时间获取文章,可以关注本人公众号:月牙寂道长
  10. 关于SVN无法cleanup的问题