Android百度鷹眼軌跡

ofollow,noindex">百度鷹眼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的命令視窗

keytool -list -v -keystore 簽名檔案的路徑
命令
demo:keytool -list -v -keystore sign.jks

點選提交後,就可以看到應用對應的AK的,後面程式碼部分會用到的。

建立鷹眼服務
點選地址進入百度鷹眼服務管理,點選建立服務,輸入對應的資料。


,後面程式碼部分會用到。
工程配置
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管理工具類 */ objectTraceManager { 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校驗失敗,還有一種情況就是當天的配額已用完(如果使用的是個人的)