文档章节

iOS开发百度导航SDK的使用入门

法斗斗
 法斗斗
发布于 2016/01/15 10:28
字数 1709
阅读 89
收藏 0

iOS开发百度导航SDK的使用入门

        百度地图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。答案是可以的。下面是百度官方的截图。
iOS开发百度导航SDK的使用入门

         第二步: 下载SDK。百度导航SDK的下载地址 http://developer.baidu.com/map/index.php?title=ios-navsdk/sdkios-nav-download 下载的包有开发文档和SDK以及demo程序。
         第三步: 根据申请密钥时的bundle indentifer创建一个项目。我的项目名为csctest,因为我写的项目的签名为com.calinks.csctest。将当前最新SDK文件夹BaiduNavi_iOSSDK_v2.0.4_Lib加入到项目中,如果此刻运行程序会出现错误。因为现在项目一般都是用ARC,而导航SDK中提供的TouchJSON是非ARC编译选项。所以要在Build Phases的Compile Sources中关于TouchJSON的文件的Compiler Flags添加-fno-objc-arc。
iOS开发百度导航SDK的使用入门
     第四步: 加入库的头文件。此时运行程序不会报错。接下来一般的思路就是加入库的头文件,在AppDelegate.m中加入

#import "BNCoreServices.h"。
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions中加入

[BNCoreServices_Instance initServices: @"itIDWOfDPlQo5camfY5GeqOK"];

[BNCoreServices_Instance startServicesAsyn:nil fail:nil];


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

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


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

iOS开发百度导航SDK的使用入门

_OBJC_CLASS_$_NSManagedObjectModel", referenced from:

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

  "_OBJC_CLASS_$_NSFetchRequest", referenced from:

      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", referenced from:

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

  "_NSSQLiteStoreType", referenced from:

      -[BDETTSCoreDataHelper setupPersistentStore] in libbaiduNaviSDK.a(BDETTSCoreDataHelper.o)

ld: symbol(s) not found for architecture armv7

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


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


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

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

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

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


        还有一点,导航要能在后台一直运行。需要加入iOS开发百度导航SDK的使用入门


        

       

       第六步: 注意初始化失败的问题。加入导航代码时,不要在程序启动时立即直接进入导航功能,因为导航初始化需要时间,在实际情况下也不需要程序启动时立即进入导航功能,因为要输入终点。所以,我建议写一个按钮,点击再进入导航。以免提示@"引擎尚未初始化完成,请稍后再试"

      第七步: 导航的功能代码
                  在ViewController.m中加入
#import "BNCoreServices.h",#import "BNRoutePlanModel.h",#import "BNCoreServices.h"。实现<</span>BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate>两个委托方法。主要代码

//发起导航

- (void)startNavi

{

    //节点数组

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

    

    //起点

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

    startNode.pos = [[BNPosition alloc] init];

    startNode.pos.x = 113.936392;

    startNode.pos.y = 22.547058;

    startNode.pos.eType = BNCoordinate_BaiduMapSDK;

    [nodesArray addObject:startNode];

    

    //终点

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

    endNode.pos = [[BNPosition alloc] init];

    endNode.pos.x = 114.077075;

    endNode.pos.y = 22.543634;

    endNode.pos.eType = BNCoordinate_BaiduMapSDK;

    [nodesArray addObject:endNode];

    //发起路径规划

    [BNCoreServices_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nildelegete:self userInfo:nil];

}

           

//算路成功回调

-(void)routePlanDidFinished:(NSDictionary *)userInfo

{

    NSLog(@"算路成功");

    

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

    [BNCoreServices_UI showNaviUI: BN_NaviTypeReal delegete:self isNeedLandscape:YES];

}

//算路失败回调

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

{

    NSLog(@"算路失败");

    if ([error code] == BNRoutePlanError_LocationFailed) {

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

    }

    else if ([error code] == BNRoutePlanError_LocationServiceClosed)

    {

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

    }

}

//算路取消回调

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

    NSLog(@"算路取消");

}


#pragma mark - BNNaviUIManagerDelegate


//退出导航回调

-(void)onExitNaviUI:(NSDictionary*)extraInfo

{

    NSLog(@"退出导航");

}


- (IBAction)StartNavAction:(id)sender {

    if (![self checkServicesInited]) return;

    _naviType = BN_NaviTypeReal;

    [self startNavi];

}



    第八步: 百度语音授权。 http://app.navi.baidu.com/ttsregister/appinfo然而就在信心满满,以为可以语音导航的时候,突然弹出个提示并没有语音导航功能出来。因为还需要一个百度语音授权。填写Bundle Id和对应的密钥AK,再运行程序,就可以正常使用了。
iOS开发百度导航SDK的使用入门





源代码已经放到QQ群共享:460325065。
iOS开发百度导航SDK的使用入门





朋友的问题:
关于3G网络下跳转到如下界面,而WIFI不会跳转的现象。3G网络下每次导航时会先跳到那个页面大概1秒钟,然后再跳进导航页面。关闭导航后,会返回那个页面,点击一下后才会返回到 app中去。而跳转到下载页面的情况是可以屏蔽的。
 我觉得这是百度对用户流量的保护。进入下面页面是给用户一个选择,因为百度APP是有离线功能包的,能极大介绍流量消耗。目前从API以及功能描述来看,并没有给出去掉这个界面的办法。
iOS开发百度导航SDK的使用入门

还有朋友下载了我的DEMO程序,然后改成自己的签名和密钥,在运行程序时会出现下面提示,TTS授权失败,无法使用TTS,是否发起发起算路进入导航。出现这个提示的原因还是第八步没做。

iOS开发百度导航SDK的使用入门 iOS开发百度导航SDK的使用入门
如何注册百度地图的语音导航授权?通过下图就可以知道了
iOS开发百度导航SDK的使用入门





分享: 

本文转载自:

上一篇: 百度地图
法斗斗
粉丝 22
博文 368
码字总数 17774
作品 0
杨浦
程序员
私信 提问
IOS软件开发视频教程要的来

IPhone开发实战视频教程内容介绍 1.iPhone开发实战视频教程-iOS开发视频教程 介绍了iPhone开发的开发环境iOS SDK,X-Code,Interface Builder,iTunes等;创建项目的基本步骤,项目工程中文件...

三毛钱
2016/07/09
242
3
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
革命性移动端开发框架-Flutter时间简史

说到Flutter,可能很多同学都会将它和这几个词关联起来:新兴的、移动端、动态化、跨平台、开发框架。 从去年开始Flutter的热度在不断地上升,那么它对很多同学造成了一个误区:认为Flutter...

JiaPengHui
03/09
0
0
学习如何针对iOS 7进行开发?

  iOS 7已经发布了六个测试版,除了beta 6进行了小幅修正外,其他几个测试版都有不小的改动。昨天有消息说苹果将在9月10日发布iOS 7正式版,那么GM版很快将会与开发者见面。在iOS 7来临前夕...

fangzhou99
2013/09/17
0
0
ios 有没有做GIS的开源SDK或软件?

最近想做一款GIS的应用程序,部署在ipad硬件上;但我不知道怎么入手。就是在ipad上能够显示地图、导航,采集,标注等功能的GIS软件。 查找了许多资料都是基于ARCGIS API for ios;baidu API ...

ios与GIS新手
2012/12/06
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

解决vim打开之后乱码的问题

在Windows中的文档,传输到Linux系统中(使用rz命令),出现乱码 root@localhost ~]# rpm -qf `which iconv` glibc-common-2.17-105.el7.x86_64 [root@localhost ~]# rpm -ihv /mnt/Packages......

寰宇01
12分钟前
0
0
aldi 2017年1月记录

../../tools/CBLAS/lib/cblas_LINUX.a ../../tools/lapack-3.4.2/liblapacke.a \../../tools/lapack-3.4.2/librefblas.a -lgfortran \../../tools/lapack-3.4.2/liblapack.a \../../......

MtrS
13分钟前
0
0
Choerodon如何进行日志收集与告警

作者:董文启 应用程序日志是由软件应用程序记录的事件文件, 它一般包含错误,信息事件和警告。一个良好的日志系统有助于快速发现问题,定位问题,同时也为业务分析起到一定的作用。 传统E...

Choerodon
25分钟前
1
0
js二维码生成插件“jquery.qrcode.min.js”

<!doctype html> <html> <head> <meta charset="utf-8" /> <title>生成二维码</title> <script type='text/javascript' src='http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js'></scri......

泉天下
28分钟前
0
0
Spring AOP之同一个对象方法内部自调用导致事务失效问题

对于像我这种喜欢滥用AOP的程序员,遇到坑也是习惯了,不仅仅是事务,其实只要脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,SpringAOP,就切入不...

xiaomin0322
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部