lmw
2025-04-14 0361f47762f9958f2ec91fdb62bfc98de4e162a6
app/src/main/java/com/xianning/driver/ui/main/TripActivity.kt
@@ -1,19 +1,22 @@
package com.xianning.driver.ui.main
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.PersistableBundle
import android.os.*
import android.util.Log
import android.view.View
import androidx.core.os.bundleOf
import cn.sinata.xldutils.utils.*
import com.amap.api.location.AMapLocationListener
import com.amap.api.maps.AMap
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Marker
import com.amap.api.maps.model.Polyline
import com.baidu.location.BDAbstractLocationListener
import com.baidu.location.BDLocation
import com.baidu.location.LocationClient
import com.baidu.mapapi.map.BaiduMap
import com.baidu.mapapi.map.Marker
import com.baidu.mapapi.map.Overlay
import com.baidu.mapapi.model.LatLng
import com.baidu.navisdk.adapter.BNRoutePlanNode
import com.baidu.navisdk.adapter.BaiduNaviManagerFactory
import com.baidu.navisdk.adapter.IBNRoutePlanManager
import com.baidu.navisdk.adapter.IBaiduNaviManager
import com.baidu.navisdk.adapter.struct.BNaviInitConfig
import com.xianning.driver.R
import com.xianning.driver.base.BaseEvent
import com.xianning.driver.base.MyApplication
@@ -24,10 +27,8 @@
import com.xianning.driver.base.gaode.AMapKit.getTimeType
import com.xianning.driver.base.gaode.AMapKit.initMap
import com.xianning.driver.base.gaode.AMapKit.moveCamera
import com.xianning.driver.base.gaode.gpsnav.GPSNaviActivity
import com.xianning.driver.bean.OrderBean
import com.xianning.driver.bean.OrderSimpleData
import com.xianning.driver.bean.RessignBean
import com.xianning.driver.netUtls.*
import com.xianning.driver.ui.DialogUtil
import com.xianning.driver.ui.main.major.MajorSureMoneyActivity
@@ -36,6 +37,11 @@
import com.google.gson.Gson
import com.trello.rxlifecycle3.android.ActivityEvent
import com.xianning.driver.base.gaode.AMapKit.moveCamera3
import com.xianning.driver.base.gaode.BaiduUtils
import com.xianning.driver.base.gaode.gpsnav.BaiduNaviActivity
import com.xianning.driver.bean.MajorMoneyBean
import com.xianning.driver.ui.main.major.MajorSureMoneyOfflineActivity
import com.ypx.imagepicker.utils.PBitmapUtils
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -48,6 +54,7 @@
import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.toast
import java.util.ArrayList
import java.util.concurrent.TimeUnit
@@ -70,13 +77,15 @@
    var startMarker: Marker? = null
    var endMarker: Marker? = null
    var carMarker: Marker? = null
    var markerLine: Polyline? = null
    lateinit var aMap: AMap
    var markerLine: Overlay? = null
    lateinit var aMap: BaiduMap
    lateinit var orderBean: OrderBean
    private var listener:BDAbstractLocationListener? = null
    private var locationClient: LocationClient? = null
    var naviHandler: Handler? = null
    override fun setContentView() {
        setContentView(R.layout.activity_trip)
@@ -93,9 +102,51 @@
        setTitleText("准备出发-去接客户-等待客户-服务中")
        tv_Right.text = "取消订单"
        callOrder()
        initNaviSdk()
        initMineLocation()
        onclick()
        addSockectCancel()
        naviHandler = object :Handler(Looper.getMainLooper()){
            override fun handleMessage(msg: Message) {
                when(msg.what){
                    IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_START->{
                        Log.e("mmp","算路开始")
                    }
                    IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_SUCCESS->{
                        Log.e("mmp","算路成功")
                    }
                    IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_FAILED->{
                        Log.e("mmp","算路失败")
                    }
                    IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_TO_NAVI->{
                        Log.e("mmp","算路成功准备进入导航")
                        startActivity<BaiduNaviActivity>()
                    }
                }
            }
        }
    }
    private fun initNaviSdk() {
        val config = BNaviInitConfig.Builder().sdcardRootPath(PBitmapUtils.getPickerFileDirectory(this).absolutePath)
            .naviInitListener(object :IBaiduNaviManager.INaviInitListener{
                override fun onAuthResult(p0: Int, p1: String?) {
                    Log.e("mmp","导航组件初始化onAuthResult(${p0}:${p1})")
                }
                override fun initStart() {
                    Log.e("mmp","导航组件初始化开始")
                }
                override fun initSuccess() {
                    Log.e("mmp","导航组件初始化成功")
                }
                override fun initFailed(p0: Int) {
                    Log.e("mmp","导航组件初始化失败:$p0")
                }
            }).build()
        BaiduNaviManagerFactory.getBaiduNaviManager().init(this, config)
    }
    private fun addSockectCancel() {
@@ -176,12 +227,7 @@
            orderBean.let {
                when (it.data.orderState) {
                    2, 3 -> {
//                        startAMapNavi(makeMarker!!)
                        startActivity<GPSNaviActivity>(
                            "start" to carMarker!!.position,
                            "end" to makeMarker!!.position
                        )
                        startNavi(carMarker!!.position,makeMarker!!.position)
                    }
                    4 -> {
@@ -192,12 +238,12 @@
                        if (endMarker == null){
                            toast("暂无终点")
                        }else{
                            startActivity<GPSNaviActivity>(
                                "start" to carMarker!!.position,
                                "end" to endMarker!!.position
                            )
                            startNavi(carMarker!!.position,endMarker!!.position)
//                            startActivity<GPSNaviActivity>(
//                                "start" to com.amap.api.maps.model.LatLng(carMarker!!.position.latitude,carMarker!!.position.longitude),
//                                "end" to com.amap.api.maps.model.LatLng(endMarker!!.position.latitude,endMarker!!.position.longitude)
//                            )
                        }
                    }
                    else -> {
@@ -226,23 +272,10 @@
                        }
                    }
                    5, 6 -> {
                        it.data.orderState = 6
                        when(orderType){
                            "2" -> {
                                showMoneyTypeDialog()
                            }
                            "1" -> {
                                callStatue(6,{
                                    startActivity<MajorSureMoneyActivity>(
                                        "orderId" to orderId,
                                        "orderType" to orderType
                                    )
                                    finish()
                                }) {
                                }
                            }
                        }
                        if (it.data.payManner == 3){
                            showMoneyTypeDialog()
                        }else
                            callorderMoney()
                    }
                }
            }
@@ -251,6 +284,33 @@
        iv_phone.clickDelay {
            orderBean.let {
                Utils.callPhone(this, it.data.phone)
            }
        }
    }
    /**
     * 陈昆:结束订单前(state==5)需要计算费用
     */
    private fun callorderMoney() {
        var map = getMapByAny()
        map["orderId"] = orderId
        map["orderType"] = orderType
        callNet(false, Api.queryMoneyInfo, map) {
            orderBean.data.orderState = 6
            callStatue(6,{
                if (orderBean.data.payManner == 2){
                    startActivity<MajorSureMoneyOfflineActivity>(
                        "orderId" to orderId,
                        "orderType" to orderType
                    )
                }else
                    startActivity<MajorSureMoneyActivity>(
                        "orderId" to orderId,
                        "orderType" to orderType
                    )
                finish()
            }) {
            }
        }
    }
@@ -310,7 +370,7 @@
            val map = getMapByAny()
            map["orderId"] = orderId
            map["orderType"] = orderType
            map["type"] = 2
            map["type"] = 3
            callStatue(6,{
                callNet(Api.confirmFees, map) {
                    finish()
@@ -353,39 +413,39 @@
    private fun changeCarThree(isMove: Boolean) {
        if (makeMarker != null && carMarker != null) {
            AMapKit.initRouteLine(
                this,
                makeMarker!!.position,
                carMarker!!.position,
                object : (MutableList<LatLng>, Float, Long) -> Unit {
                    override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
                        var view = creatCarView("距预约点" + AMapKit.getTance(p2))
                        carMarker!!.setIcon(getIcon(view))
                        addline(p1)
                        if (isMove)
                            moveCamera(aMap, makeMarker!!.position, carMarker!!.position)
                    }
                })
            BaiduUtils.initRouteLine(carMarker!!.position,makeMarker!!.position,object :BaiduUtils.Callback{
                override fun onGetDrivingRouteResult(
                    latLngs: ArrayList<LatLng>?,
                    lineTance: Float,
                    lineTime: Long
                ) {
                    var view = creatCarView("距预约点" + AMapKit.getTance(lineTance))
                    carMarker!!.setIcon(getIcon(view))
                    addline(latLngs?: arrayListOf())
                    if (isMove)
                        moveCamera(aMap, makeMarker!!.position, carMarker!!.position)
                }
            })
        }
    }
    private fun changeCarFive(isMove: Boolean) {
        if (carMarker != null && endMarker != null) {
            AMapKit.initRouteLine(
                this,
                carMarker!!.position,
                endMarker!!.position,
                object : (MutableList<LatLng>, Float, Long) -> Unit {
                    override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
                        addline(p1)
                        var view =
                            creatCarView("剩余" + AMapKit.getTance(p2) + "\n" + "预计还需" + p3.toInt() + "分钟")
                        carMarker!!.setIcon(getIcon(view))
                        if (isMove) {
                            moveCamera3(aMap, carMarker!!.position, endMarker!!.position,carMarker!!.position)
                        }
            BaiduUtils.initRouteLine(carMarker!!.position,endMarker!!.position,object :BaiduUtils.Callback{
                override fun onGetDrivingRouteResult(
                    latLngs: ArrayList<LatLng>,
                    lineTance: Float,
                    lineTime: Long
                ) {
                    addline(latLngs)
                    var view =
                        creatCarView("剩余" + AMapKit.getTance(lineTance) + "\n" + "预计还需" + lineTime.toInt() + "分钟")
                    carMarker!!.setIcon(getIcon(view))
                    if (isMove) {
                        moveCamera3(aMap, carMarker!!.position, endMarker!!.position,carMarker!!.position)
                    }
                })
                }
            })
        }else{
            var view =
                creatCarView()
@@ -428,19 +488,19 @@
        if (makeMarker == null) {
            val view = createView(R.layout.item_map_market_make, this)
            view.iv_img.setImageResource(R.mipmap.trip_yuyue)
            makeMarker = addMarker(aMap, it.data.startLat, it.data.startLon, view, "")
            makeMarker = addMarker(aMap, it.data.startLat, it.data.startLon, view, "") as Marker
        }
        makeMarker!!.isVisible = false
        if (startMarker == null) {
            val view = createView(R.layout.item_map_market, this)
            view.iv_img.setImageResource(R.mipmap.starting_point)
            startMarker = addMarker(aMap, it.data.startLat, it.data.startLon, view, "")
            startMarker = addMarker(aMap, it.data.startLat, it.data.startLon, view, "") as Marker
        }
        startMarker!!.isVisible = false
        if (endMarker == null) {
        if (endMarker == null&&it.data.endLat!=0.0) {
            val view = createView(R.layout.item_map_market, this)
            view.iv_img.setImageResource(R.mipmap.end_point)
            endMarker = addMarker(aMap, it.data.endLat, it.data.endLon, view, "")
            endMarker = addMarker(aMap, it.data.endLat, it.data.endLon, view, "") as Marker
        }
        endMarker?.isVisible = false
        if (carMarker == null) {
@@ -451,7 +511,7 @@
                MyApplication.getLocation().longitude,
                carView,
                ""
            )
            ) as Marker
        }
        carMarker!!.isVisible = false
        if (markerLine != null) {
@@ -577,6 +637,7 @@
        if (handler != null) {
            handler?.removeCallbacksAndMessages(null)
        }
        naviHandler?.removeCallbacksAndMessages(null)
        closeTimeStart()
        MyApplication.removeOrderView(this)
        map_view.onDestroy()
@@ -593,11 +654,6 @@
        map_view.onResume()
    }
    override fun onLowMemory() {
        super.onLowMemory()
        map_view.onLowMemory()
    }
    override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
        super.onSaveInstanceState(outState, outPersistentState)
        map_view.onSaveInstanceState(outState)
@@ -606,7 +662,7 @@
    private fun addline(allLine: MutableList<LatLng>) {
    private fun addline(allLine: ArrayList<LatLng>) {
        closeLine()
        markerLine = AMapKit.drawLine(this, aMap, allLine)
    }
@@ -615,6 +671,24 @@
        if (markerLine != null) {
            markerLine!!.remove()
        }
    }
    private fun startNavi(start:LatLng,end:LatLng){
        val list = arrayListOf<BNRoutePlanNode>()
        val startNode = BNRoutePlanNode.Builder()
            .longitude(start.longitude)
            .latitude(start.latitude)
            .build()
        val endNode = BNRoutePlanNode.Builder()
            .longitude(end.longitude)
            .latitude(end.latitude)
            .build()
        list.add(startNode)
        list.add(endNode)
        BaiduNaviManagerFactory.getRoutePlanManager().routePlan(
            list,
            IBNRoutePlanManager.RoutePlanPreference.ROUTE_PLAN_PREFERENCE_DEFAULT,
            bundleOf(), naviHandler)
    }
@@ -626,7 +700,6 @@
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        aMap = initMap(savedInstanceState, map_view)
        map_view.onCreate(savedInstanceState)
    }
    override fun onEventMainThread(event: BaseEvent?) {