久等了,鹰眼教程差点忘了写,嘿嘿,现在补上,其实鹰眼在深度运用时还是挺难搞的,会遇到很多坑,这次由于时间有限,忙里偷闲只出了一个基本功能,包含轨迹上传、历史轨迹获取及绘制,深度运用的话,如果大家有需要,我就抽时间出,没评论那就这一篇了,现在开始!

准备工作

引入鹰眼的SDK

SDK下载地址:http://lbsyun.baidu.com/index.php?title=android-yingyan/sdkandev-download
下载好解压之后得到如下图的文件

将红框中的文件和文件夹统统扔进Android工程的“libs”文件夹下

获取serviceId

进入鹰眼轨迹管理台,创建一个服务,如下图

第一列就是应用的serviceId

权限

 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission><!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission><!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission><!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission><!-- 用于读取手机当前的状态 --><uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission><!-- 写入扩展存储,向扩展卡写入数据,用于写入对象存储BOS数据 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission><!-- 访问网络,网络定位需要上网 --><uses-permission android:name="android.permission.INTERNET" /><!-- SD卡读取权限,用于写入对象存储BOS数据 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses-permission><!-- 用于加快GPS首次定位 --><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" ></uses-permission><!-- 用于Android M及以上系统,申请加入忽略电池优化白名单 --><uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" ></uses-permission>

再注册一个鹰眼轨迹的服务

<service
            android:name="com.baidu.trace.LBSTraceService"android:enabled="true"android:process=":remote" ></service>

其他的还有基本地图的初始化、AK的声明(<application>中),之前帖子说过。

功能实现

步骤:显示地图>>>实现定位>>>开启轨迹服务>>>查询历史轨迹>>>显示历史轨迹
主要在于后三步,前两步是为显示历史轨迹服务的(实现定位那一步想省去也可以)
直接看后三步的实现方法吧

开启轨迹服务

先初始化服务和服务客户端,设置定位和打包周期

// 初始化轨迹服务Trace mTrace = new Trace(serviceId, entityName, isNeedObjectStorage);// 初始化轨迹服务客户端mTraceClient = new LBSTraceClient(getApplicationContext());// 定位周期(单位:秒)int gatherInterval = 5;// 打包回传周期(单位:秒)int packInterval = 10;// 设置定位和打包周期mTraceClient.setInterval(gatherInterval, packInterval);

开启服务和采集

        mTraceClient.startTrace(mTrace, mTraceListener);//开启服务mTraceClient.startGather(mTraceListener);//开启采集

在开启过程中用到了轨迹服务监听器mTraceListener,实现代码:

// 初始化轨迹服务监听器OnTraceListener mTraceListener = new OnTraceListener() {@Overridepublic void onStopTraceCallback(int arg0, String arg1) {// 停止服务回调}@Overridepublic void onStopGatherCallback(int arg0, String arg1) {// 停止采集回调}@Overridepublic void onStartTraceCallback(int arg0, String arg1) {// 开启服务回调}@Overridepublic void onStartGatherCallback(int arg0, String arg1) {// 开启采集回调}@Overridepublic void onPushCallback(byte arg0, PushMessage arg1) {// TODO Auto-generated method stub}};

由此已经开启了轨迹上传,由于本实例仅仅作为功能展示,在实际项目中肯定要涉及到轨迹服务的存活的问题,肯定不能像我这样直接把这些功能的实现写在某一activity下,重编译Android底层的办法我就不说了(其实我是不会,小弟才疏学浅),我说一下我之前的解决办法,写一个远程服务类,“.aidl”文件是少不了的,把对轨迹上传的相关操作放在远程服务里,但是即使是远程服务也无法保障在内存告急时候依然存活,所以仅仅是远程服务是不够了,要把服务搞成前台服务(自己百度),设置成前台服务以后能够大大提高保活率,我是这么做的,但是现在的手机都搞一键清理,直接就清掉了,两个服务通过广播相互启动也不行,一键清理直接全部杀死,我暂时还没找到更合适的办法,如果你有,请不吝赐教,拜谢!

查询历史轨迹

轨迹数据已经在服务存活时根据设置的周期上传至百度的云存储里,下面开始说如何查询已经上传的轨迹数据

    private void queryHistoryTrack() {// 结束时间long endTime = (System.currentTimeMillis() / 1000);//初始值(可省)long start = System.currentTimeMillis() / 1000 - 12 * 60 * 60;//初始值(可省)endTime = getStringToDate("2017-08-28 23:59:59");//毫秒start = getStringToDate("2017-08-28 00:00:00");//毫秒System.out.println("开始:" + start + ",结束:" + endTime);// 查询历史轨迹HistoryTrackRequest htr = new HistoryTrackRequest(1, serviceId,entityName);htr.setServiceId(serviceId);//设置serviceIdhtr.setProcessed(false);// 是否纠偏htr.setEntityName(entityName); // entity标识htr.setPageIndex(pageIndex);// 分页索引htr.setPageSize(pageSize);// 分页大小htr.setStartTime(start);// 开始时间htr.setEndTime(endTime);// 结束时间mTraceClient.queryHistoryTrack(htr, new OnTrackListener() {@Overridepublic void onHistoryTrackCallback(HistoryTrackResponse response) {// TODO Auto-generated method stubsuper.onHistoryTrackCallback(response);System.out.println("数量:" + response.getSize());if (response.getSize() > 0) {//如果当前日期范围内有数据点,则准备绘制List<TrackPoint> tp = response.getTrackPoints();// 所有点的坐标信息数据集Point startPoint = response.getStartPoint();// 起点的坐标信息Point endPoint = response.getEndPoint();// 终点的坐标信息drawHistoryTrack(tp, startPoint, endPoint);// 绘制折线}}});}

查询的历史轨迹时间周期时间差要控制在24个小时之内,为了节省时间,我没有动态设置时间范围,直接写死了,在实际项目中应该有时间列表的动态选择
建议在实际运用时轮询该函数,直至获取到正确的返回数据为止,如果是持续监听当前轨迹变化,那就还有别的实现方式,这次只讲解如果单纯获取历史轨迹;在编写demo时,偷懒了一下,直接线程延迟了5秒才执行该函数,但是实际项目中不要这样
如果请求的该时间段内有轨迹数据,那么会返回一个数据集HistoryTrackResponse

显示历史轨迹

获取之后需要将轨迹点绘制在地图上,也就是绘制折线

private void drawHistoryTrack(List<TrackPoint> list_tp, Point startPoint,Point endPoint) {showMarker(startPoint, 0);//调用showMarker()函数标记起点showMarker(endPoint, 1);//调用showMarker()函数标记终点List<LatLng> points = new ArrayList<LatLng>();//遍历轨迹坐标,装载到List<LatLng>for (int i = 0; i < list_tp.size(); i++) {points.add(new LatLng(list_tp.get(i).getLocation().getLatitude(),list_tp.get(i).getLocation().getLongitude()));}// 构造对象 设置折线的宽度和颜色以及pointsOverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);// 添加到地图mBaiduMap.addOverlay(ooPolyline);}

有一点需要注意,如代码所示,先拿到了轨迹返回的坐标集合,后来又遍历一次,是因为轨迹服务的LatLng对象与基础地图的LatLng对象属性是不一致的,所以要重新遍历装载到基础地图sdk中定义的LatLng数据集List<LatLng>
这样就把轨迹呈现在了地图上
showMarker()函数

private void showMarker(Point point, int i) {// 定义Maker坐标点LatLng latlng = new LatLng(point.getLocation().getLatitude(), point.getLocation().getLongitude());// 构建Marker图标BitmapDescriptor bitmap;if (i == 0) {bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_start);} else if (i == 1) {bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_end);} else {bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);}// 构建MarkerOption,用于在地图上添加MarkerOverlayOptions option = new MarkerOptions().position(latlng).icon(bitmap);// 在地图上添加Marker,并显示mBaiduMap.addOverlay(option);}

完毕!绘制的轨迹是否正确,直接去轨迹管理台查一下相应日期官方绘制的轨迹一对应就行了,当然啦,我这个是没有设置纠偏的,纠偏之后又是另一种形态

源码地址:http://download.csdn.net/download/qq_23931287/9956534

来张成品图

百度地图API基础操作--百度鹰眼篇相关推荐

  1. java 百度鹰眼sdk,百度地图API基础操作--百度鹰眼

    [实例简介] 博文地址:http://blog.csdn.net/qq_23931287/article/details/77684033 [实例截图] [核心代码] 6bd90028-b72d-48 ...

  2. 百度地图API制作类似 百度地图的路线导航界面并实现简单的路线规划功能

    之前我们讲了怎么在百度地图上设置Marker(如A点..) 和弹出框(跟随Marker的,Marker移动的时候也是会跟着移动的),接着又觉得百度地图自带的放大缩小不(fei)是(chang)很(de ...

  3. 安卓学习专栏——百度地图(1)获取SHA1指纹申请百度地图API Key使用百度LBS定位功能(图文保姆级)

    步骤 系列文章 前言 1.前期准备 2.创建应用 3.获取发布版SHA1和开发版SHA1 3.1找到.android文件夹位置 3.2Android Studio的Terminal中cd路径 3.3输 ...

  4. 百度地图API—简易操作

    效果图 代码 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset=" ...

  5. android 百度地图api密钥,Android百度地图开发获取秘钥之SHA1

    最近在做一个关于百度地图的开发. 不过在正式开发之前还必须要在百度地图API官网里先申请秘钥,而在申请秘钥的过程中,就需要获取一个所谓的SHA1值. 如上所示,但是由于不是正式开发,所以以上的发布版和 ...

  6. 百度地图api设置html5,百度地图API详解之自定义地图类型

    今天的文章主要介绍如何利用地图API实现自定义地图. 百度地图API目前默认支持两种地图类型(map type):普通图和三维图,它们分别通过常量BMAP_NORMAL_MAP和BMAP_PERSPE ...

  7. 经由过程百度地图API,将百度坐标转换成GPS经纬度

    百度地图API中,有GPS坐标转百度坐标的功能 http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_6#0&6 htt ...

  8. 【百度地图api】前端 百度地图添加地理围栏

    需求:添加教练场区域,在百度地图上选择多边形电子围栏,保存坐标: 主要参考百度地图api: 遇到的小坑:注意绘制百度地图多边形时,传入的坐标数组的结构!!! 相对来说比较简单,百度api已经很详细了. ...

  9. 百度地图API学习---隐藏百度版权标志

    通过设置css样式来隐藏百度版权标志  如下图 通过设置 .anchorBL{display:none; } 效果如下图

最新文章

  1. MFC中快速应用OpenCV(转)
  2. systemverilog数据类型
  3. 微信能远程控制电脑吗_神器分享:用微信就能远程控制电脑,这款神器有些厉害...
  4. Mybatis(12)事务原理和自动提交设置
  5. quartz集群分布式(并发)部署解决方案-Spring
  6. 如果可以再读一次研究生
  7. 【总结】Apache Sentry 服务简介
  8. tomcat部署安装
  9. pip安装时ReadTimeoutError解决办法
  10. Nmap列举远程机器开放的端口
  11. wsimport命令介绍
  12. 商务部都在努力为直销行业创造良好的发展环境,你还在等什么?
  13. 【Python】pandas的使用——CSV文件、Excel文件、TXT文件之间的转换
  14. 《修炼——我的职场十年》 摘录
  15. 关于Dell r720重装系统时遇到的识别不到磁盘的问题
  16. 数据可视化之文本情绪(极性)分析
  17. 数字平原cg场景制作流程
  18. HTML制作点播图,基于HTML5的视频点播系统设计与实现_问答库
  19. 概率论基础 —— 1. 基本事件类型、运算规则,及古典概型与几何型概型
  20. 泛函分析--from BBS 水木清华站

热门文章

  1. Web端H.265播放器研发解密 1
  2. 【安卓学习笔记】安卓的事件处理
  3. Emacs Stardict
  4. POJ 2431 Expedition(贪心+优先队列)
  5. php字幕格式,如何给视频添加字幕 快速添加视频字幕|可设置文字样式、位置等...
  6. vue使用v-for循环ABC...英文字母
  7. python画图柱状图修改相邻两个柱之间的间隔
  8. SiO2/罗丹明B荧光杂化纳米微球/硅钼比核壳结构二氧化硅微球钼酸钙荧光粉的性能
  9. 【ESP32_8266_WiFi (十五)】ESP8266 OTA 操作说明
  10. 12v电量显示制作方法_由分立器件设计的汽车12V电池电量指示器(上) | 电子懒人的基础硬件电路图讲解...