lmw
2024-02-23 be87b65cb6ac9a2352f09117c1fa82862aba73ff
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")
    }
}