| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | import org.greenrobot.eventbus.EventBus |
| | | import org.jetbrains.anko.startActivity |
| | | import org.jetbrains.anko.toast |
| | | import java.util.ArrayList |
| | | import java.util.concurrent.TimeUnit |
| | | |
| | | |
| | |
| | | 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) |
| | |
| | | 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() { |
| | |
| | | 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 -> { |
| | |
| | | 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 -> { |
| | | |
| | |
| | | } |
| | | } |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | |
| | | 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() |
| | | }) { |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | val map = getMapByAny() |
| | | map["orderId"] = orderId |
| | | map["orderType"] = orderType |
| | | map["type"] = 2 |
| | | map["type"] = 3 |
| | | callStatue(6,{ |
| | | callNet(Api.confirmFees, map) { |
| | | finish() |
| | |
| | | |
| | | 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() |
| | |
| | | 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) { |
| | |
| | | MyApplication.getLocation().longitude, |
| | | carView, |
| | | "" |
| | | ) |
| | | ) as Marker |
| | | } |
| | | carMarker!!.isVisible = false |
| | | if (markerLine != null) { |
| | |
| | | if (handler != null) { |
| | | handler?.removeCallbacksAndMessages(null) |
| | | } |
| | | naviHandler?.removeCallbacksAndMessages(null) |
| | | closeTimeStart() |
| | | MyApplication.removeOrderView(this) |
| | | map_view.onDestroy() |
| | |
| | | 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) |
| | |
| | | |
| | | |
| | | |
| | | private fun addline(allLine: MutableList<LatLng>) { |
| | | private fun addline(allLine: ArrayList<LatLng>) { |
| | | closeLine() |
| | | markerLine = AMapKit.drawLine(this, aMap, allLine) |
| | | } |
| | |
| | | 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) |
| | | } |
| | | |
| | | |
| | |
| | | override fun onCreate(savedInstanceState: Bundle?) { |
| | | super.onCreate(savedInstanceState) |
| | | aMap = initMap(savedInstanceState, map_view) |
| | | map_view.onCreate(savedInstanceState) |
| | | } |
| | | |
| | | override fun onEventMainThread(event: BaseEvent?) { |