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