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/netUtls/Api.java | 7 app/src/main/java/com/zhaoyang/driver/ui/main/MainActivity.kt | 3 app/src/main/java/com/zhaoyang/driver/ui/pub/LoginActivity.kt | 3 app/src/main/java/com/zhaoyang/driver/ui/main/TripActivity.kt | 183 +++++++++++++++++++++++++++++ app/src/main/java/com/zhaoyang/driver/ui/to_city/TripCityActivity.kt | 2 app/src/main/java/com/zhaoyang/driver/ui/mine/AddCarActivity.kt | 2 .idea/gradle.xml | 1 app/src/main/res/layout/activity_share.xml | 5 app/src/main/java/com/zhaoyang/driver/ui/main/small_cargo/SmallCargoActivity.kt | 2 app/src/main/java/com/zhaoyang/driver/base/MyApplication.kt | 110 ++++++++++++++++-- app/src/main/res/layout/activity_change_car.xml | 2 11 files changed, 288 insertions(+), 32 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 49a496c..3d88029 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -21,6 +21,5 @@ <option name="useQualifiedModuleNames" value="true" /> </GradleProjectSettings> </option> - <option name="offlineMode" value="true" /> </component> </project> \ No newline at end of file diff --git a/app/src/main/java/com/zhaoyang/driver/base/MyApplication.kt b/app/src/main/java/com/zhaoyang/driver/base/MyApplication.kt index 9de3c79..9ccfafa 100644 --- a/app/src/main/java/com/zhaoyang/driver/base/MyApplication.kt +++ b/app/src/main/java/com/zhaoyang/driver/base/MyApplication.kt @@ -14,10 +14,9 @@ import com.amap.api.location.AMapLocation 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.model.AddTerminalRequest -import com.amap.api.track.query.model.QueryTerminalRequest -import com.amap.api.track.query.model.QueryTerminalResponse +import com.amap.api.track.query.model.* import com.zhaoyang.driver.base.gaode.gpsnav.util.TTSController import com.zhaoyang.driver.base.local.OnTripTrackLifecycleListener import com.zhaoyang.driver.base.local.OnTripTrackListener @@ -51,7 +50,8 @@ /** * Created by Administrator on 2018/1/17. */ -class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks { +class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks, OnTrackListener, + OnTrackLifecycleListener { //设置debug模式 var isDebug = false var heartHandler: Handler? = null @@ -80,7 +80,7 @@ PlatformConfig.setQQZone("102047428", "qcBXgbJo6B2f5HF0") //qq互联 // CrashReport.initCrashReport(getApplicationContext(), "444bb776ed", false); LogUtils.OpenLog(true) - initUpPoint() +// initUpPoint() initSocket() JPushInterface.setDebugMode(true) JPushInterface.init(this) @@ -296,24 +296,24 @@ super.onQueryTerminalCallback(queryTerminalResponse) if (p0.isSuccess) { // 创建完成,开启猎鹰服务 - sysErr("创建完成,开启猎鹰服务" + p0.errorMsg) - var terminalId = queryTerminalResponse!!.tid; + sysErr("创建完成,开启猎鹰服务" + p0.errorMsg+",tid:${p0.tid}") + terminalId = queryTerminalResponse!!.tid aMapTrackClient.startTrack( TrackParam( serviceId, terminalId ), onTrackLifecycleListener - ); + ) } else { // 请求失败 sysErr("请求失败" + p0.getErrorMsg()) } } - }); + }) } else { // terminal已经存在,直接开启猎鹰服务 - var terminalId = p0.tid - sysErr("创建完成,开启猎鹰服务" + p0.errorMsg) + terminalId = p0.tid + sysErr("terminal已经存在,直接开启猎鹰服务" + p0.errorMsg+",tid:${p0.tid}") aMapTrackClient.startTrack( TrackParam(serviceId, terminalId), onTrackLifecycleListener @@ -326,7 +326,26 @@ }) } +// fun stopTrack(){ +// var serviceIdS = CacheKey.getServerId() +// if (serviceIdS == "") +// return +// var serviceId = serviceIdS.toLong() +// var terminalName = CacheKey.getTerminalName() // 唯一标识某个用户或某台设备的名称 +// aMapTrackClient.stopTrack(TrackParam(serviceId, terminalId), +// onTrackLifecycleListener) +// } + + + fun createTrack(){ + val serviceIdS = CacheKey.getServerId() + if (serviceIdS == "") + return + aMapTrackClient.addTrack(AddTrackRequest(serviceIdS.toLong(), terminalId), this)//创建行程轨迹id + } + lateinit var aMapTrackClient: AMapTrackClient + private var terminalId = 0L var onTrackLifecycleListener = object : OnTripTrackLifecycleListener() { override fun onStartGatherCallback(p0: Int, p1: String?) { if (p0 == ErrorCode.TrackListen.START_GATHER_SUCEE || @@ -481,7 +500,6 @@ private var showNum = 0 override fun onActivityPaused(activity: Activity?) { - } override fun onActivityResumed(activity: Activity?) { @@ -512,5 +530,73 @@ activities.add(activity) } + override fun onQueryTerminalCallback(p0: QueryTerminalResponse?) { + } + + override fun onCreateTerminalCallback(p0: AddTerminalResponse?) { + } + + override fun onDistanceCallback(p0: DistanceResponse?) { + } + + override fun onLatestPointCallback(p0: LatestPointResponse?) { + } + + override fun onHistoryTrackCallback(p0: HistoryTrackResponse?) { + } + + override fun onQueryTrackCallback(p0: QueryTrackResponse?) { + } + + override fun onAddTrackCallback(p0: AddTrackResponse?) { + if (p0?.isSuccess == true) { + val trackId = p0.trid + sysErr("轨迹创建成功,轨迹Id:$trackId") + var serviceIdS = CacheKey.getServerId() + val trackParam = TrackParam(serviceIdS.toLong(), terminalId) + trackParam.trackId = trackId + aMapTrackClient.startTrack(trackParam, this) //开始采集位置 + } else { + sysErr("轨迹创建失败") + } + } + + override fun onParamErrorCallback(p0: ParamErrorResponse?) { + } + + override fun onBindServiceCallback(p0: Int, p1: String?) { + sysErr("onBindServiceCallback") + } + + override fun onStartGatherCallback(p0: Int, p1: String?) { + if (p0 == ErrorCode.TrackListen.START_GATHER_SUCEE || + p0 == ErrorCode.TrackListen.START_GATHER_ALREADY_STARTED + ) { + sysErr( "定位采集开启成功!") + } else { + sysErr( "定位采集启动异常!") + } + } + + 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 { + sysErr( "轨迹上报服务服务启动异常!") + } + } + + override fun onStopGatherCallback(p0: Int, p1: String?) { + sysErr("onStopGatherCallback:关闭定位采集") + } + + override fun onStopTrackCallback(p0: Int, p1: String?) { + sysErr("onStopTrackCallback") + } + } \ No newline at end of file diff --git a/app/src/main/java/com/zhaoyang/driver/netUtls/Api.java b/app/src/main/java/com/zhaoyang/driver/netUtls/Api.java index ccf2481..f454632 100644 --- a/app/src/main/java/com/zhaoyang/driver/netUtls/Api.java +++ b/app/src/main/java/com/zhaoyang/driver/netUtls/Api.java @@ -10,7 +10,7 @@ //39.108.148.228 测试服务器 public static final String BASE_URL = "https://www.zycx.ztrbkj.com/driver/"; -// public static final String BASE_URL = "http://192.168.110.50:80/driver/"; +// public static final String BASE_URL = "https://0ifzoxq2516g.guyubao.com/driver/"; public static final String SOCKET_SERVER = "47.108.137.172"; // public static final String SOCKET_SERVER = "192.168.110.50"; @@ -18,8 +18,8 @@ public static final int SUCCESS = 200; public static final String strShare = "https://www.zycx.ztrbkj.com/share/shareIndex.html"; - public static final String strShareDriver = "http://122.9.134.230:8080/driverShare/qr.html"; - public static final int WXLAUID = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE; + public static final String strShareDriver = "https://www.zycx.ztrbkj.com/share_qr/shareIndex.html"; + public static final int WXLAUID = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE; // public static final String strShare = "http://39.108.148.228:8080/share/shareIndex.html"; // public static final String strShareDriver = "http://39.108.148.228:8080/driverShare/qr.html"; @@ -68,6 +68,7 @@ public static String queryCityOrderInfo = "api/orderCrossCity/queryOrderInfo"; //api/orderCrossCity/queryOrderInfo 获取订单跨城详情 public static String setOrderCrossCitySort = "api/orderCrossCity/setOrderCrossCitySort"; ///api/orderCrossCity/setOrderCrossCitySort 修改订单顺序(跨城) public static String getInviteList = "api/driver/getInviteList"; ///api/driver/getInviteList 获取邀请司机/乘客列表 + public static String getTrackId = "api/order/getTrackId"; //司机流程中创建猎鹰轨迹-接收轨迹id /*** * 消息 diff --git a/app/src/main/java/com/zhaoyang/driver/ui/main/MainActivity.kt b/app/src/main/java/com/zhaoyang/driver/ui/main/MainActivity.kt index 57e0d62..3bd2035 100644 --- a/app/src/main/java/com/zhaoyang/driver/ui/main/MainActivity.kt +++ b/app/src/main/java/com/zhaoyang/driver/ui/main/MainActivity.kt @@ -70,8 +70,7 @@ callcarAll() toastTo() callTime("1") - - +// MyApplication.getInstance()!!.initUpPoint() } override fun onRestart() { 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 diff --git a/app/src/main/java/com/zhaoyang/driver/ui/main/small_cargo/SmallCargoActivity.kt b/app/src/main/java/com/zhaoyang/driver/ui/main/small_cargo/SmallCargoActivity.kt index fd0762f..ccd358e 100644 --- a/app/src/main/java/com/zhaoyang/driver/ui/main/small_cargo/SmallCargoActivity.kt +++ b/app/src/main/java/com/zhaoyang/driver/ui/main/small_cargo/SmallCargoActivity.kt @@ -106,7 +106,7 @@ initMineLocation() onclick() addSockectCancel() - MyApplication.getInstance()!!.initUpPoint() + MyApplication.getInstance()!!.createTrack() } private fun addSockectCancel() { diff --git a/app/src/main/java/com/zhaoyang/driver/ui/mine/AddCarActivity.kt b/app/src/main/java/com/zhaoyang/driver/ui/mine/AddCarActivity.kt index 999db1c..ea2fcc4 100644 --- a/app/src/main/java/com/zhaoyang/driver/ui/mine/AddCarActivity.kt +++ b/app/src/main/java/com/zhaoyang/driver/ui/mine/AddCarActivity.kt @@ -75,7 +75,7 @@ } override fun initView() { - setTitleText("添加车辆") + setTitleText("更换车辆") et_name.transformationMethod = InputCapLowerToUpper() } diff --git a/app/src/main/java/com/zhaoyang/driver/ui/pub/LoginActivity.kt b/app/src/main/java/com/zhaoyang/driver/ui/pub/LoginActivity.kt index 441a3c6..6ba1c8b 100644 --- a/app/src/main/java/com/zhaoyang/driver/ui/pub/LoginActivity.kt +++ b/app/src/main/java/com/zhaoyang/driver/ui/pub/LoginActivity.kt @@ -44,7 +44,6 @@ override fun setOnclick() { - tv_driver.setOnClickListener { startActivity<BecomeDriverActivity>() } @@ -55,10 +54,10 @@ iv_eye.setOnClickListener { callHtml { - } showEye(iv_eye,et_login_pwd) } + tv_login.setOnClickListener { if (et_login_phone.getString().isEmpty()){ toast("请输入手机号") diff --git a/app/src/main/java/com/zhaoyang/driver/ui/to_city/TripCityActivity.kt b/app/src/main/java/com/zhaoyang/driver/ui/to_city/TripCityActivity.kt index e44c681..6d93f30 100644 --- a/app/src/main/java/com/zhaoyang/driver/ui/to_city/TripCityActivity.kt +++ b/app/src/main/java/com/zhaoyang/driver/ui/to_city/TripCityActivity.kt @@ -110,7 +110,7 @@ initMineLocation() onclick() addSockectCancel() - MyApplication.getInstance()!!.initUpPoint() + MyApplication.getInstance()!!.createTrack() } private fun addSockectCancel() { diff --git a/app/src/main/res/layout/activity_change_car.xml b/app/src/main/res/layout/activity_change_car.xml index a6775de..eb86774 100644 --- a/app/src/main/res/layout/activity_change_car.xml +++ b/app/src/main/res/layout/activity_change_car.xml @@ -72,7 +72,7 @@ android:layout_marginBottom="14dp" android:background="@drawable/bg_login" android:gravity="center" - android:text="添加车辆" + android:text="更换车辆" android:textColor="#ffffffff" android:textSize="14sp" /> diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index acb0ce1..e37b85f 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -57,14 +57,11 @@ android:layout_weight="1" android:gravity="center" android:text="分享二维码" + android:visibility="gone" android:textColor="@color/white" android:background="@drawable/car_get_start" android:textSize="14sp" android:textStyle="bold" /> - - <View - android:layout_width="50dp" - android:layout_height="wrap_content"/> <TextView -- Gitblit v1.7.1