终于走上工作岗位了,这一次要做导航功能,怎么样,有信心吗?既然选择的开发安卓,当然要坚持,写一个导航功能还是很简单的,百度有的是借口,好吧,这是开发安卓的人,最常见的态度。但是第一次在工作写代码真心不是意见容易的事
不废话了,进入正题,本文适合对还没有百度地图开发经验,和开发过程中有问题的IT同志们
首先实现导航有三种模式:
1使用百度地图的导航功能,也就是navi这个类!这是参考
实现起来比较简单,1.找到坐标点通过定位的回调的起点,2长按得到需要终点,发起对百度导航界面调度的过程
http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/v4_1_0/index.html
2将百度导航嵌入到代码中,这个实现起来还是相当复杂的,但是也还是有办法的,那就是 慕课网 上有关于这个的视频开发,讲的还是挺详细的!! 可以在app端看的,一边看,一边就写完了,还是很快
带你理一边流程,
2.1显示key(和TTS)(sha1&md5:eclipse->android->build中,如果要上线的还是按官方办法获取)
2.2清单文件,key的注册,诱导界面的注册!(又到界面没有xml文件),service的注册,
2.3jar,so包导入和assets中的资源文件,又到界面的activity的直接到导入
2.4代码部分:
一.注册sdk,地图的引入,getmap(),
二.定位 LoactionClient(百度用的定位服务) ,LocationClientOption(设置参数),registerlistener,注册监听
三.BDLocationListener监听的回调类,获取BDLocation这个坐标类型,ll为当前坐标,移动到坐标位置
MapStatus ms = new MapStatus.Builder( mBaiduMap.getMapStatus()).target(ll).zoom(18.0f).build();
mBaiduMap.animateMapStatus(MapStatusUpdateFactory .newMapStatus(ms));
四.长按获取终点坐标 mBaiduMap.setOnMapLongClickListener
五.设置坐标点集合list<BNRoutePlanNode>,将始终点转换坐标类型,放入list集合中
六.跳转导航界面
BaiduNaviManager.getInstance().launchNavigator(this,// context对象
list,// 坐标点集合
1,// 默认
false,// 是否开启真实导航,false为模拟导航,当前时速达到900KM/h 我都笑了,导航还叫你减速慢性
new RoutePlanListener(sNode));// 回调监听类,
在这里面有onJumpToNavigator回调的方法用来写跳转诱导界面的方法
Intent intent = new Intent(MainActivity.this,BNDemoGuideActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(ROUTE_PLAN_NODE,(BNRoutePlanNode) mBNRoutePlanNode);
intent.putExtras(bundle);
startActivity(intent)
3通过Intent直接调度到百度app,可以加入参数(稍微麻烦一点),当然也可以直接调度过去,看自己需求,后来做完才发现,公司的项目并不是主要需要百度功能,这样会节约资源,也不用去管理导航这块!!跟重要的一点百度导航的功能还是很强大的!!高德地图应该也是不错的(默默的祝愿两家能够良性竞争,市场就是要有活性!)
带参数调起:http://blog.csdn.net/ljb_blog/article/details/11047655
方法说完了,能看到这,才是重点,因为写了一个星期,各种坑还是值得一题的
1jar包版本冲突,第二次开发导航的一定要注意了,因为版本的问题是肯定会冲突的,所以还是重新刷一遍jar.so包,
2在assets中有png(其实是资源文件)的3个文件,还是一定要引入的
3.关于生命周期的方法,一定要善于使用,因为定位服务,和导航都是一个比较耗时和好点的操作,及时关闭可以,省点电,在外面面试的,和出去玩,遇到手机快没电了是意见非常尴尬的事情!!,省电还是很重要的!!
4安卓版本的坑,6.0设置了敏感权限,例如GPS等等!!所以在6.0以下(23.0主要是说开发版本)是没有那个关于权限回调的方法,好像还是在activity中重写的方法,包括调用方法
5在里面最复杂的问题我觉得还是坐标点之间的转换了,(最好还是用百度的BD09LL吧)因为到最后百度导航还是会有偏移!!
http://blog.csdn.net/jixianwanmei999/article/details/36415755
LagLng 经纬度坐标,
GeoPoint 世界地理坐标点,类似于经纬度
Location,这个可以通过android里的LocationListener监听回调来获取,这是基于内置GPS的Service获得的,
这个是通过GPS获取的,比较精确,所以里面还有关于速度,角度等一些比较精确的数据,做测绘应该会用!!
BDLocation 百度坐标,包含很多信息地址相关的信息 在百度的
整理的差不多了,希望对开发的新手们有点帮助,这也是我成长的一个开始了!!以后好好写技术文档了!!