| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | import java.util.concurrent.TimeUnit |
| | | |
| | | |
| | | class TripActivity : MyBaseActivity() { |
| | | class TripActivity : MyBaseActivity(), OnTrackListener, OnTrackLifecycleListener { |
| | | |
| | | /*** |
| | | * // 流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束) |
| | |
| | | } |
| | | var isTimeStart = false //限制计时器 |
| | | |
| | | |
| | | var makeMarker: Marker? = null |
| | | var startMarker: Marker? = null |
| | | var endMarker: Marker? = null |
| | |
| | | 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) |
| | |
| | | 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() { |
| | |
| | | when (it.data.orderState) { |
| | | 2, 3 -> { |
| | | startNavi(carMarker!!.position.latitude,carMarker!!.position.longitude,makeMarker!!.position.latitude,makeMarker!!.position.longitude) |
| | | |
| | | } |
| | | |
| | | 4 -> { |
| | |
| | | callStatue(num, it.data.orderState,{ |
| | | MyApplication.getTTsManager().setVideoText("乘客您好,为了您的安全,上车请系好安全带,谢谢配合!") |
| | | showStatueMapUI(it) |
| | | aMapTrackClient.addTrack(AddTrackRequest(serviceIdS, terminalId), this)//创建轨迹id |
| | | }) { |
| | | it.data.orderState-- |
| | | } |
| | |
| | | "orderType" to orderType |
| | | ) |
| | | finish() |
| | | aMapTrackClient.stopGather(this) //停止轨迹采集 |
| | | } |
| | | } |
| | | } |
| | |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | //查询猎鹰轨迹 |
| | | 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) { |
| | |
| | | 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) //开始采集位置 |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | }) |
| | | } |
| | | |
| | | private fun setTrack(trackId:String) { |
| | | var map = getMapByAny() |
| | | map["orderId"] = orderId |
| | | map["orderType"] = orderType |
| | | map["trackId"] = trackId |
| | | callNet(Api.getTrackId, map) { |
| | | } |
| | | } |
| | | |
| | | override fun setOnclick() { |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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") |
| | | } |
| | | } |