Android百度鹰眼轨迹

作者: 慕涵盛华 | 来源:发表于2018-10-19 14:09 被阅读38次

百度鹰眼Android开发指南

相关概念

service

一个Service(即鹰眼轨迹服务)对应一个轨迹管理系统,一个service里可管理多个终端设备(即entity),service的唯一标识符是service_id。例如,针对某出租车公司的轨迹管理系统,可以创建一个service,在其中管理所有出租车的轨迹。

entity

一个entity代表现实中一个被追踪轨迹的终端设备,它可以是一个人、一辆车或者任何运动物体。同一个service中,entity以entity_name作为唯一标识。查询轨迹也是通过entity_name来获取对应的轨迹数据。

track

entity移动所产生的连续轨迹被称为track,track由一系列轨迹点(point)组成。一个轨迹称为一个track。

前置准备

主要是创建应用获取对应的AK以及创建鹰眼管理服务。

获取AK

创建应用地址


创建输入应用名,包名,以及发布版的SHA1值。

通过命令来获取发布版的SHA1值

1.打开Android Studio的命令窗口


2.输入keytool -list -v -keystore 签名文件的路径命令
demo:keytool -list -v -keystore sign.jks

点击提交后,就可以看到应用对应的AK的,后面代码部分会用到的。


创建鹰眼服务

创建鹰眼服务地址
点击地址进入百度鹰眼服务管理,点击创建服务,输入对应的数据。



创建成功后,会生成一个Service ID,后面代码部分会用到。

工程配置

Android 鹰眼轨迹SDK下载地址
1.解压下载的SDK文件,将各架构的SO文件置于APP对应架构下的文件夹中,将jar文件拷贝到工程的libs目录下


注意:若使用鹰眼的图像存储功能,需导入bos-android-sdk-1.0.2.jar,如果只使用轨迹,只需要BaiduTraceSDK_v3_0_7.jar

2.配置AndroidManifest.xml
声明service组件

<!--鹰眼轨迹服务-->
<service 
      android:name="com.baidu.trace.LBSTraceService" 
      android:enabled="true"
      android:process=":remote"> 
</service>

声明使用权限

<!-- 这个权限用于进行网络定位--> 
<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"></uses-permission> 
<!-- SD卡读取权限,用于写入对象存储BOS数据-->

设置AccessKey

<meta-data             
android:name="com.baidu.lbsapi.API_KEY"             
android:value="AK" />    上面创建应用生成的的Key

3.代码实现

/**
 * Trace管理工具类
 */
object  TraceManager {

    private val serviceId : Long = 205748
    //轨迹的唯一标识
    private var entityName : String = "myTrace"
    // 定位周期(单位:秒)
    private val gatherInterval = 5
    //打包回传周期(单位:秒)
    private val packInterval = 10
    // 是否需要对象存储服务,默认为:false,关闭对象存储服务。
    private val isNeedObjectStorage = false
    //轨迹服务是否开启,false:关闭;true:开启
    private var isTraceStart = false

    private lateinit var mTrace : Trace
    private lateinit var mTraceClient : LBSTraceClient
    private lateinit var mTraceListener: OnTraceListener

    /**
     * 初始化操作
     * @param context Context
     */
    fun init(context: Context){
        mTraceClient = LBSTraceClient(context)
        mTraceClient.setInterval(gatherInterval, packInterval)
        mTraceClient.setLocationMode(LocationMode.High_Accuracy)
        mTraceClient.setProtocolType(ProtocolType.HTTP)
        mTrace = Trace(serviceId, entityName, isNeedObjectStorage)
        initTraceListener()
    }

    /**
     * 初始化轨迹监听接口
     */
    private fun initTraceListener() {
        mTraceListener = object : OnTraceListener {
            override fun onStartGatherCallback(status: Int, message: String) {
            }

            override fun onBindServiceCallback(status: Int, message: String) {
            }

            override fun onInitBOSCallback(status: Int, message: String) {
            }

            override fun onStopGatherCallback(status: Int, message: String) {
            }

            override fun onPushCallback(status: Byte, message: PushMessage) {
            }

            override fun onStartTraceCallback(status: Int, message: String) {
                //启动Trace服务成功
                if(status == StatusCodes.SEARCHING || status >= StatusCodes.START_TRACE_NETWORK_CONNECT_FAILED){
                    //开始采集轨迹数据,只有Trace服务启动成功后,才能开始采集,否则轨迹功能不成功
                    isTraceStart = true
                    mTraceClient.startGather(mTraceListener)
                }
            }

            override fun onStopTraceCallback(status: Int, message: String) {
                //CACHE_TRACK_NOT_UPLOAD:服务停止成功,但是没有轨迹数据没有上传
                if(status == StatusCodes.SUCCESS || status == StatusCodes.CACHE_TRACK_NOT_UPLOAD){
                    isTraceStart = false
                }
            }

        }
    }

    /**
     * 开始轨迹记录
     */
    fun startTrace(){
        mTraceClient.startTrace(mTrace, mTraceListener)
    }

    /**
     * 结束轨迹记录
     */
    fun stopTrace(){
        if(isTraceStart){//服务已经开启
            mTraceClient.stopTrace(mTrace, mTraceListener)
            mTraceClient.stopGather(mTraceListener)
        }
    }

}

注意:mTraceClient.startGather(mTraceListener)采集必须开启轨迹服务成功后才能启动,否则采集失败。把该代码放入监听回调中。

可能会遇到错误码=10001的情况,一般是AK校验失败,还有一种情况就是当天的配额已用完(如果使用的是个人的)

相关文章

网友评论

    本文标题:Android百度鹰眼轨迹

    本文链接:https://www.haomeiwen.com/subject/sdkjzftx.html