uploadtrack

简介

鹰眼Android SDK可根据开发者设置的定位和回传频率,自动采集并回传轨迹。

开发者通过在APP中调用startTrace()和stopTrace()方法,来控制何时开始轨迹采集、何时停止轨迹采集。

最基础的轨迹追踪

实现最简单的轨迹追踪功能,请参见Hello Trace部分示例。

在开启轨迹追踪前,需要进行以下几步:

1. 初始化Trace,示例:

// 轨迹服务ID
long serviceId = 1234;
// 设备名称
String entityName = “myTrace”;
// 轨迹服务类型,traceType必须设置为UPLOAD_LOCATION才能追踪轨迹
int traceType = UPLOAD_LOCATION;
// 初始化轨迹服务
Trace trace = new Trace(getApplicationContext(), serviceId, entityName,     traceType);


2. 初始化LBSTraceClient,示例:

// 初始化轨迹服务客户端
LBSTraceClient client = new LBSTraceClient(getApplicationContext());
// 采集周期
int gatherInterval = 10;
// 打包周期
int packInterval = 60;
// http协议类型
int protocolType = 1;
 
// 设置采集和打包周期
client. setInterval(gatherInterval, packInterval);
// 设置定位模式
client. setLocationMode(LocationMode.High_Accuracy);
// 设置http协议类型
client. setProtocolType (protocolType);

3. 在AndroidManifest.xml文件中配置API_KEY(AK),示例:

<application>
    <meta-data
        android:name="com.baidu.lbsapi.API_KEY"
        android:value="申请的Android端AK" />
     ......
</application>

4.开始轨迹追踪

//开始轨迹追踪
client.startTrace(trace, onStartTraceListener);

startTrace()对应的回调接口为onStartTraceListener中的onTraceCallback()接口

5.结束轨迹追踪

//开始轨迹追踪
client.stopTrace(trace, onStopTraceListener);

stopTrace()对应的回调接口为onStopTraceListener中的onTraceCallback()接口

设置轨迹定位周期和回传周期

概念:

定位周期:多久定位一次,在定位周期大于15s时,SDK会将定位周期设置为5的倍数(如设置采集周期为18s,SDK会调整为15s;设置为33s,SDK会调整为30s)


回传周期:鹰眼为节省电量和流量,并不是定位一次就回传一次数据,而是隔段时间将一批定位数据打包压缩回传。(回传周期最大不要超过定位周期的10倍,例如,定位周期为10s,则回传周期最好不要大于60s)


鹰眼SDK支持开发者动态设置定位周期和回传周期(2s到5分钟),可以在开启服务前设置,也可以在服务运行过程中动态设置,随时生效。开发者可自行判断终端的运动速度和状态,动态调整定位周期。


使用示例:

//位置采集周期
int gatherInterval = 10;
//打包周期
int packInterval = 60;
//设置位置采集和打包周期
client.setInterval(gatherInterval, packInterval);

轨迹点自定义属性数据上传

轨迹中的每个位置点可拥有一系列开发者自定义的描述字段,如汽车的油量、发动机转速等,用以记录行程中的实时状态信息。

开发者须重写OnTrackListener监听器中的onTrackAttrCallback()接口,并按照设置的定位周期更新onTrackAttrCallback()的返回值。SDK每采集一次轨迹,便会自动回调onTrackAttrCallback()接口,获取属性值并写入当前轨迹点的属性字段中。

onTrackAttrCallback()的返回值是Map<String, String>类型,每个对象都是一个<key,value>对,其中key为entity的自定义字段名称,value为值。


示例:

若开发者已创建了一个名为oil的用来记录车辆当前剩余油量的entity属性字段,此时可重写 注:SDK根据位置采集周期回调该接口,获取轨迹属性数据。

//轨迹属性回调接口
OnTrackListener trackListener = new OnTrackListener() {
      @Override
      public Map<String, String> onTrackAttrCallback() {     
 
          Map<String, String> trackAttrs = new HashMap<String, String>();     
          String oil = getCurrentOil();//getCurrentOil()为开发者自定义的获取当前油量的方法
          trackAttrs.put("oil", oil);
          return trackAttrs;
     }
}

复杂网络状态下,SDK的连接与轨迹回传策略

在网络状态持续良好的情况下,SDK将按照指定频率回传轨迹。如果在开启轨迹追踪时、追踪过程中、或结束轨迹追踪时遇到网络不稳定或断网的情况,SDK也有相应处理策略:


①开启追踪追踪,调用startTrace()时

只要调用startTrace(),不论网络状态和startTrace()回调的状态码是什么,SDK都将立即开始采集并缓存轨迹,若此时网络连接正常,将实时回传轨迹;若连上不可上网的Wi-Fi或网络断开,则将缓存轨迹在手机数据库中,并自动监听网络,待联网时自动回传缓存数据(处于缓存状态时,因为轨迹在设备端,实时位置、历史轨迹和里程都不能获取到最新的轨迹信息)。


②轨迹追踪过程中

若追踪过程中,出现网络中断、连上不可上网的Wi-Fi,或网络频繁切换时,SDK都将自动开启缓存模式,将采集的轨迹数据保存到数据库中,并自动监听网络,待联网时自动回传缓存数据。


③停止轨迹追踪,调用stopTrace()时

只要调用stopTrace(),无论网络状态和返回值如何,SDK都将立即停止轨迹采集。

若此时网络连接正常,SDK将加快上传已缓存的轨迹,上传成功后在回调用返回停止服务成功;

若此时已断网或回传过程中断网,将立即停止回传,缓存数据存储至手机数据库中,返回停止服务成功,再次startTrace时才会继续回传缓存数据。