From be87b65cb6ac9a2352f09117c1fa82862aba73ff Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期五, 23 二月 2024 10:15:23 +0800
Subject: [PATCH] 猎鹰

---
 app/src/main/java/com/zhaoyang/driver/ui/main/TripActivity.kt |  183 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 179 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/com/zhaoyang/driver/ui/main/TripActivity.kt b/app/src/main/java/com/zhaoyang/driver/ui/main/TripActivity.kt
index c7a8f07..62fc349 100644
--- a/app/src/main/java/com/zhaoyang/driver/ui/main/TripActivity.kt
+++ b/app/src/main/java/com/zhaoyang/driver/ui/main/TripActivity.kt
@@ -3,6 +3,7 @@
 import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
+import android.util.Log
 import android.view.View
 import cn.sinata.xldutils.utils.*
 import com.amap.api.location.AMapLocationListener
@@ -15,6 +16,12 @@
 import com.amap.api.navi.AmapNaviParams
 import com.amap.api.navi.AmapNaviType
 import com.amap.api.navi.AmapPageType
+import com.amap.api.track.AMapTrackClient
+import com.amap.api.track.ErrorCode
+import com.amap.api.track.OnTrackLifecycleListener
+import com.amap.api.track.TrackParam
+import com.amap.api.track.query.entity.DriveMode
+import com.amap.api.track.query.model.*
 import com.zhaoyang.driver.R
 import com.zhaoyang.driver.base.BaseEvent
 import com.zhaoyang.driver.base.MyApplication
@@ -38,6 +45,7 @@
 import com.zhaoyang.driver.utils.MyUtils
 import com.google.gson.Gson
 import com.trello.rxlifecycle3.android.ActivityEvent
+import com.zhaoyang.driver.utils.Cache.CacheKey
 import io.reactivex.Observable
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
@@ -54,7 +62,7 @@
 import java.util.concurrent.TimeUnit
 
 
-class TripActivity : MyBaseActivity() {
+class TripActivity : MyBaseActivity(), OnTrackListener, OnTrackLifecycleListener {
 
     /***
      * //    流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束)
@@ -69,7 +77,6 @@
     }
     var isTimeStart = false //限制计时器
 
-
     var makeMarker: Marker? = null
     var startMarker: Marker? = null
     var endMarker: Marker? = null
@@ -79,6 +86,18 @@
     lateinit var orderBean: OrderBean
     var graylist = arrayListOf<LatLng>() // 灰色轨迹
     var grayline:Polyline? = null
+
+    private lateinit var aMapTrackClient: AMapTrackClient
+    private val terminalName by lazy {//终端名
+        "Driver-${CacheKey.getUserId()}"   // 唯一标识某个用户或某台设备的名称
+    }
+    private val serviceIdS by lazy {//服务号
+        val sid = CacheKey.getServerId()
+        if (sid.isNullOrEmpty()) 0L else sid.toLong()
+    }
+    private var terminalId = 0L//终端id
+
+    private val TAG_TRACK = "猎鹰Log"
 
     override fun setContentView() {
         setContentView(R.layout.activity_trip)
@@ -91,7 +110,20 @@
         initMineLocation()
         onclick()
         addSockectCancel()
-        MyApplication.getInstance()!!.initUpPoint()
+        initTrack()
+    }
+
+    /**
+     * 初始化猎鹰
+     */
+    private fun initTrack() {
+        if (serviceIdS == 0L)
+            return
+        aMapTrackClient = AMapTrackClient(applicationContext)
+        aMapTrackClient.queryTerminal(
+            QueryTerminalRequest(serviceIdS, terminalName),
+            this
+        ) //查询终端是否已注册
     }
 
     private fun addSockectCancel() {
@@ -215,7 +247,6 @@
                 when (it.data.orderState) {
                     2, 3 -> {
                         startNavi(carMarker!!.position.latitude,carMarker!!.position.longitude,makeMarker!!.position.latitude,makeMarker!!.position.longitude)
-
                     }
 
                     4 -> {
@@ -247,6 +278,7 @@
                                 callStatue(num, it.data.orderState,{
                                     MyApplication.getTTsManager().setVideoText("乘客您好,为了您的安全,上车请系好安全带,谢谢配合!")
                                     showStatueMapUI(it)
+                                    aMapTrackClient.addTrack(AddTrackRequest(serviceIdS, terminalId), this)//创建轨迹id
                                 }) {
                                     it.data.orderState--
                                 }
@@ -272,6 +304,7 @@
                                         "orderType" to orderType
                                     )
                                     finish()
+                                    aMapTrackClient.stopGather(this) //停止轨迹采集
                                 }
                             }
                         }
@@ -402,6 +435,7 @@
                 graylist.add(LatLng(it.latitude, it.longitude))
                 grayline?.remove()
                 grayline = AMapKit.drawLine(this,aMap,graylist,R.color.gray)
+//                queryTrack() //debug调用
             }
             orderBean.let {
                 when (it.data.orderState) {
@@ -414,6 +448,32 @@
                 }
             }
         })
+    }
+
+    //查询猎鹰轨迹
+    private fun queryTrack() {
+        if (orderBean.data.trackId.isNullOrEmpty())
+            return
+        val queryTrackRequest = QueryTrackRequest(
+            serviceIdS,
+            terminalId,
+            orderBean.data.trackId.toLong(),  // 轨迹id,传-1表示查询所有轨迹
+//            1260L,  // debug轨迹id
+//            0L, //开始服务时间
+            System.currentTimeMillis() - 12 * 60 * 60 * 1000, //debug开始时间
+
+            System.currentTimeMillis(),
+            0,  // 0不启用去噪 1:去噪
+            0,  // 1绑路 0不绑路
+            0,  // 0不进行精度过滤 1过滤
+            DriveMode.DRIVING,
+            1,  // 距离补偿 1补偿 0不补偿
+            5000,  // 距离补偿,只有超过5km的点才启用距离补偿
+            1,  // 结果应该包含轨迹点信息
+            1,  // 返回第1页数据,由于未指定轨迹,分页将失效
+            100 // 一页不超过100条
+        )
+        aMapTrackClient.queryTerminalTrack(queryTrackRequest, this)
     }
 
     private fun changeCarThree(isMove: Boolean) {
@@ -593,6 +653,12 @@
                 changeCarFive(true)
                 setTitleText("服务中")
                 slide_btn.changeButtonText("送达该乘客")
+                if (!orderBean.data.trackId.isNullOrEmpty()){
+                    Log.e(TAG_TRACK, "已有轨迹id:${orderBean.data.trackId}")
+                    val trackParam = TrackParam(serviceIdS, terminalId)
+                    trackParam.trackId = orderBean.data.trackId.toLong()
+                    aMapTrackClient.startTrack(trackParam, this) //开始采集位置
+                }
             }
         }
     }
@@ -664,6 +730,15 @@
             })
     }
 
+    private fun setTrack(trackId:String) {
+        var map = getMapByAny()
+        map["orderId"] = orderId
+        map["orderType"] = orderType
+        map["trackId"] = trackId
+        callNet(Api.getTrackId, map) {
+        }
+    }
+
     override fun setOnclick() {
 
     }
@@ -687,4 +762,104 @@
             }
         }
     }
+
+    override fun onQueryTerminalCallback(p0: QueryTerminalResponse?) {
+        if (p0?.isSuccess == true) {
+            if (p0.tid <= 0) {
+                // terminal还不存在,先创建
+                aMapTrackClient.addTerminal(
+                    AddTerminalRequest(terminalName, serviceIdS),
+                    this
+                )
+            } else {
+                // terminal已经存在
+                terminalId = p0.tid
+                Log.e(TAG_TRACK, "终端已存在,terminalId:$terminalId")
+            }
+        } else {
+            //请求失败
+            Log.e(TAG_TRACK, "终端查询失败")
+        }
+    }
+
+    override fun onCreateTerminalCallback(p0: AddTerminalResponse?) {
+        if (p0?.isSuccess == true) {
+            terminalId = p0.tid
+            Log.e(TAG_TRACK, "终端创建成功,terminalId:$terminalId")
+        } else {
+            //请求失败
+            Log.e(TAG_TRACK, "终端创建失败")
+        }
+    }
+
+    override fun onDistanceCallback(p0: DistanceResponse?) {
+        Log.e(TAG_TRACK, "onLatestPointCallback")
+    }
+
+    override fun onLatestPointCallback(p0: LatestPointResponse?) {
+        Log.e(TAG_TRACK, "onLatestPointCallback")
+    }
+
+    override fun onHistoryTrackCallback(p0: HistoryTrackResponse?) {
+        Log.e(TAG_TRACK, "onHistoryTrackCallback")
+    }
+
+    override fun onQueryTrackCallback(p0: QueryTrackResponse?) {
+        if (p0?.isSuccess == true) {
+            val tracks = p0.tracks
+            Log.e(TAG_TRACK, "轨迹查询结果:${tracks.firstOrNull()?.points?.map { LatLng(it.lat, it.lng) }?.joinToString("\n") { "${it.latitude},${it.longitude}" }}")
+        } else
+            Log.e(TAG_TRACK, "轨迹查询失败,code:${p0?.errorCode},reason:${p0?.errorMsg},detail:${p0?.errorDetail}")
+    }
+
+    override fun onAddTrackCallback(p0: AddTrackResponse?) {
+        if (p0?.isSuccess == true) {
+            orderBean.data.trackId = p0.trid.toString()
+            Log.e(TAG_TRACK, "轨迹创建成功,轨迹Id:${orderBean.data.trackId}")
+            setTrack(orderBean.data.trackId)
+            val trackParam = TrackParam(serviceIdS, terminalId)
+            trackParam.trackId = orderBean.data.trackId.toLong()
+            aMapTrackClient.startTrack(trackParam, this) //开始采集位置
+        } else {
+            Log.e(TAG_TRACK, "轨迹创建失败")
+        }
+    }
+
+    override fun onParamErrorCallback(p0: ParamErrorResponse?) {
+        Log.e(TAG_TRACK, "onParamErrorCallback")
+    }
+
+    override fun onBindServiceCallback(p0: Int, p1: String?) {
+        Log.e(TAG_TRACK, "onBindServiceCallback")
+    }
+
+    override fun onStartGatherCallback(p0: Int, p1: String?) {
+        if (p0 == ErrorCode.TrackListen.START_GATHER_SUCEE ||
+            p0 == ErrorCode.TrackListen.START_GATHER_ALREADY_STARTED
+        ) {
+            Log.e(TAG_TRACK, "定位采集开启成功!")
+        } else {
+            Log.e(TAG_TRACK, "定位采集启动异常!")
+        }
+    }
+
+    override fun onStartTrackCallback(p0: Int, p1: String?) {
+        if (p0 == ErrorCode.TrackListen.START_TRACK_SUCEE ||
+            p0 == ErrorCode.TrackListen.START_TRACK_SUCEE_NO_NETWORK ||
+            p0 == ErrorCode.TrackListen.START_TRACK_ALREADY_STARTED
+        ) {
+            // 服务启动成功,继续开启收集上报
+            aMapTrackClient.startGather(this)
+        } else {
+            Log.e(TAG_TRACK, "轨迹上报服务服务启动异常!")
+        }
+    }
+
+    override fun onStopGatherCallback(p0: Int, p1: String?) {
+        Log.e(TAG_TRACK, "onStopGatherCallback:关闭定位采集")
+    }
+
+    override fun onStopTrackCallback(p0: Int, p1: String?) {
+        Log.e(TAG_TRACK, "onStopTrackCallback")
+    }
 }
\ No newline at end of file

--
Gitblit v1.7.1