diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt index a757dfb..b60eafe 100644 --- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt @@ -17,12 +17,13 @@ import android.widget.LinearLayout import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import com.amap.api.location.AMapLocation import com.amap.api.maps.AMap -import com.amap.api.maps.AMapOptions -import com.amap.api.maps.AMapUtils import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.CameraPosition import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.PolylineOptions import com.casic.birmm.inspect.R import com.casic.birmm.inspect.extensions.addAll import com.casic.birmm.inspect.extensions.id @@ -33,6 +34,7 @@ import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.LoadingDialogHub import com.casic.birmm.inspect.utils.LocaleConstant +import com.casic.birmm.inspect.utils.LocationHub import com.casic.birmm.inspect.utils.SoundPoolHelper import com.casic.birmm.inspect.view.NewEventActivity import com.casic.birmm.inspect.vm.EventViewModel @@ -58,22 +60,21 @@ private val kTag = "HomePageFragment" private val gson by lazy { Gson() } + private val blueToothBeans: MutableList = ArrayList()//搜索展示列表 + private val latLngs = LinkedList() private lateinit var homeView: View private lateinit var userData: UserInfoModel.DataModel private lateinit var vibrator: Vibrator private lateinit var eventViewModel: EventViewModel private lateinit var inspectionViewModel: InspectionViewModel private lateinit var aMap: AMap - private lateinit var locationStyle: MyLocationStyle private lateinit var weakReferenceHandler: WeakReferenceHandler - private var model = NewInspectionModel()//新建巡检数据结构模型 + private var newInspectionModel: NewInspectionModel? = null//新建巡检数据结构模型 private var isBluetoothOn = true private var curConnectState = false - private var blueToothBeans: MutableList = ArrayList()//搜索展示列表 private var currentDevice: BluetoothDevice? = null// 当前蓝牙设备 private var isGeneratingTask = false private var alarmCount = 0 - private var routeList: MutableList = ArrayList()//路线点集和 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -89,12 +90,27 @@ vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] + eventViewModel.addEventResult.observe(viewLifecycleOwner) { + if (it.code == 200) { + "保存成功".show(requireContext()) + isGeneratingTask = false + alarmCount = 0 + } + } + inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] inspectionViewModel.loadState.observe(viewLifecycleOwner) { when (it) { is LoadState.Loading -> { LoadingDialogHub.show(requireActivity(), "保存中,请稍后...") } + is LoadState.Success -> { + LoadingDialogHub.dismiss() + "巡检记录保存成功".show(requireContext()) + //清除缓存 + blueToothBeans.clear() + latLngs.clear() + } else -> LoadingDialogHub.dismiss() } } @@ -114,15 +130,59 @@ homeView.mapView.onCreate(savedInstanceState) aMap = homeView.mapView.map + val uiSettings = aMap.uiSettings - uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER - uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 + uiSettings.isCompassEnabled = true + uiSettings.isZoomControlsEnabled = true + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + //显示定位小蓝点 - locationStyle = MyLocationStyle() + val locationStyle = MyLocationStyle() locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true - aMap.moveCamera(CameraUpdateFactory.zoomTo(16.toFloat())) + aMap.mapType = AMap.MAP_TYPE_NORMAL + + LocationHub.get.getLocationByAMap(requireContext(), object : LocationHub.ILocationListener { + override fun onAMapLocationGet(aMapLocation: AMapLocation?) { + if (aMapLocation == null) { + "当前信号弱,无法定位".show(requireContext()) + return + } + + val longitude = aMapLocation.longitude.toString() + val latitude = aMapLocation.latitude.toString() + + Log.d(kTag, "startInspection => [${longitude},${latitude}]") + val latLng = LatLng(latitude.toDouble(), longitude.toDouble()) + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 1500, null) + + //newInspectionModel已完成初始化,说明已经新建巡检任务,数据可以开始保存了 + if (newInspectionModel != null) { + latLngs.add(latLng) + + //绘制线 + aMap.addPolyline( + PolylineOptions().addAll(latLngs).width(10f).color(Color.RED) + ) + + //设置起始经纬度 + newInspectionModel!!.startLng = latLngs.first.longitude + newInspectionModel!!.startLat = latLngs.first.latitude + + // 包装routes,每五个点取一次经纬度 + for (i in 0..latLngs.size step 5) { + newInspectionModel!!.routes.add( + RoutePointModel(latLngs[i].latitude, latLngs[i].longitude) + ) + } + } + } + }) initEvent() @@ -139,13 +199,16 @@ val currentTimeMillis = System.currentTimeMillis() val startTime = currentTimeMillis.timestampToCompleteDate() - model = NewInspectionModel( + //设置标题和时间 + homeView.inspectNameView.text = value + homeView.inspectTimeView.text = startTime + + newInspectionModel = NewInspectionModel( currentTimeMillis.id(), value, startTime, "", currentTimeMillis.timestampToDate(), 0.0, 0.0, 0.0, 0.0, - "", userData.name!! + ArrayList(), userData.name!! ) - startInspection() } override fun onCancelClick() { @@ -158,7 +221,7 @@ menuButtonEvent() homeView.newEventButton.setOnClickListener { - if (model.id.isNullOrBlank()) { + if (newInspectionModel == null) { "还未开始巡检,无法新建事件".show(requireContext()) return@setOnClickListener } @@ -169,15 +232,12 @@ .setActionItemTitle(listOf("巡检记录", "事件记录")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - //获取当前定位 - val lng = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LONGITUDE, "0.0" - ) as String - val lat = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LATITUDE, "0.0" - ) as String requireContext().navigatePageTo( - addAll(position.toString(), model.id, model.name, lng, lat) + addAll( + position.toString(), + newInspectionModel!!.id, newInspectionModel!!.name, + latLngs.last.longitude.toString(), latLngs.last.latitude.toString() + ) ) } }).build().show() @@ -253,46 +313,6 @@ } } - /** - * 开始巡检,获取坐标 - * */ - private fun startInspection() { - //设置标题和时间 - homeView.inspectNameView.text = model.name - homeView.inspectTimeView.text = model.startTime - aMap.addOnMyLocationChangeListener { - // 保存最新的一次位置,sp不支持保存double - SaveKeyValues.putValue(LocaleConstant.CURRENT_LONGITUDE, it.longitude.toString()) - SaveKeyValues.putValue(LocaleConstant.CURRENT_LATITUDE, it.latitude.toString()) - //设置起始经纬度 - if (model.startLng == 0.0 || model.startLat == 0.0) { - model.startLng = it.longitude - model.startLat = it.latitude - } - // 包装routes - if (routeList.size <= 2) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } else { - //计算上一个点和当前点的距离 - val last = routeList.size - 1 - val distance = AMapUtils.calculateLineDistance( - LatLng(routeList[last].lat, routeList[last].lng), - LatLng(it.latitude, it.longitude) - ) - if (distance >= 10) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } - } - model.routes = gson.toJson(routeList) - } - } - override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.BLUETOOTH_ON -> { @@ -475,27 +495,24 @@ * * 如果保存到本地,则需要设置标识位,然后finish当前页面并提示 * */ - val endLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val endLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String + if (newInspectionModel == null) { + "保存失败".show(requireContext()) + return + } inspectionViewModel.addInspection( - id = model.id, - name = model.name, - startTime = model.startTime, + id = newInspectionModel!!.id, + name = newInspectionModel!!.name, + startTime = newInspectionModel!!.startTime, endTime = System.currentTimeMillis().timestampToCompleteDate(), - date = model.date, - startLng = model.startLng, - startLat = model.startLat, - endLng = endLng.toDouble(), - endLat = endLat.toDouble(), - routes = model.routes, + date = newInspectionModel!!.date, + startLng = newInspectionModel!!.startLng, + startLat = newInspectionModel!!.startLat, + endLng = latLngs.last.longitude, + endLat = latLngs.last.latitude, + routes = gson.toJson(newInspectionModel!!.routes), user = userData.name!! ) - inspectionViewModel.addInspectionResult.observe(this) { - if (it.code == 200) { - "巡检记录保存成功".show(requireContext()) - } - } } /** @@ -554,28 +571,19 @@ } isGeneratingTask = true - val currentLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val currentLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String eventViewModel.addEventTask( id = UUID.randomUUID().toString(), - inspectionId = model.id, - name = model.name, + inspectionId = newInspectionModel!!.id, + name = newInspectionModel!!.name, createTime = System.currentTimeMillis().timestampToCompleteDate(), type = "报警事件", - lng = currentLng.toDouble(), - lat = currentLat.toDouble(), + lng = latLngs.last.longitude, + lat = latLngs.last.latitude, data = maxValue.toDouble(), images = "", description = "自动报警记录", user = userData.name!! ) - eventViewModel.addEventResult.observe(this) { model -> - if (model.code == 200) { - "保存成功".show(requireContext()) - isGeneratingTask = false - alarmCount = 0 - } - } } /***以下是地图生命周期管理************************************************************************/ @@ -598,5 +606,6 @@ override fun onDestroy() { super.onDestroy() homeView.mapView.onDestroy() + LocationHub.get.stopLocation() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt index a757dfb..b60eafe 100644 --- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt @@ -17,12 +17,13 @@ import android.widget.LinearLayout import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import com.amap.api.location.AMapLocation import com.amap.api.maps.AMap -import com.amap.api.maps.AMapOptions -import com.amap.api.maps.AMapUtils import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.CameraPosition import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.PolylineOptions import com.casic.birmm.inspect.R import com.casic.birmm.inspect.extensions.addAll import com.casic.birmm.inspect.extensions.id @@ -33,6 +34,7 @@ import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.LoadingDialogHub import com.casic.birmm.inspect.utils.LocaleConstant +import com.casic.birmm.inspect.utils.LocationHub import com.casic.birmm.inspect.utils.SoundPoolHelper import com.casic.birmm.inspect.view.NewEventActivity import com.casic.birmm.inspect.vm.EventViewModel @@ -58,22 +60,21 @@ private val kTag = "HomePageFragment" private val gson by lazy { Gson() } + private val blueToothBeans: MutableList = ArrayList()//搜索展示列表 + private val latLngs = LinkedList() private lateinit var homeView: View private lateinit var userData: UserInfoModel.DataModel private lateinit var vibrator: Vibrator private lateinit var eventViewModel: EventViewModel private lateinit var inspectionViewModel: InspectionViewModel private lateinit var aMap: AMap - private lateinit var locationStyle: MyLocationStyle private lateinit var weakReferenceHandler: WeakReferenceHandler - private var model = NewInspectionModel()//新建巡检数据结构模型 + private var newInspectionModel: NewInspectionModel? = null//新建巡检数据结构模型 private var isBluetoothOn = true private var curConnectState = false - private var blueToothBeans: MutableList = ArrayList()//搜索展示列表 private var currentDevice: BluetoothDevice? = null// 当前蓝牙设备 private var isGeneratingTask = false private var alarmCount = 0 - private var routeList: MutableList = ArrayList()//路线点集和 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -89,12 +90,27 @@ vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] + eventViewModel.addEventResult.observe(viewLifecycleOwner) { + if (it.code == 200) { + "保存成功".show(requireContext()) + isGeneratingTask = false + alarmCount = 0 + } + } + inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] inspectionViewModel.loadState.observe(viewLifecycleOwner) { when (it) { is LoadState.Loading -> { LoadingDialogHub.show(requireActivity(), "保存中,请稍后...") } + is LoadState.Success -> { + LoadingDialogHub.dismiss() + "巡检记录保存成功".show(requireContext()) + //清除缓存 + blueToothBeans.clear() + latLngs.clear() + } else -> LoadingDialogHub.dismiss() } } @@ -114,15 +130,59 @@ homeView.mapView.onCreate(savedInstanceState) aMap = homeView.mapView.map + val uiSettings = aMap.uiSettings - uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER - uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 + uiSettings.isCompassEnabled = true + uiSettings.isZoomControlsEnabled = true + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + //显示定位小蓝点 - locationStyle = MyLocationStyle() + val locationStyle = MyLocationStyle() locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true - aMap.moveCamera(CameraUpdateFactory.zoomTo(16.toFloat())) + aMap.mapType = AMap.MAP_TYPE_NORMAL + + LocationHub.get.getLocationByAMap(requireContext(), object : LocationHub.ILocationListener { + override fun onAMapLocationGet(aMapLocation: AMapLocation?) { + if (aMapLocation == null) { + "当前信号弱,无法定位".show(requireContext()) + return + } + + val longitude = aMapLocation.longitude.toString() + val latitude = aMapLocation.latitude.toString() + + Log.d(kTag, "startInspection => [${longitude},${latitude}]") + val latLng = LatLng(latitude.toDouble(), longitude.toDouble()) + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 1500, null) + + //newInspectionModel已完成初始化,说明已经新建巡检任务,数据可以开始保存了 + if (newInspectionModel != null) { + latLngs.add(latLng) + + //绘制线 + aMap.addPolyline( + PolylineOptions().addAll(latLngs).width(10f).color(Color.RED) + ) + + //设置起始经纬度 + newInspectionModel!!.startLng = latLngs.first.longitude + newInspectionModel!!.startLat = latLngs.first.latitude + + // 包装routes,每五个点取一次经纬度 + for (i in 0..latLngs.size step 5) { + newInspectionModel!!.routes.add( + RoutePointModel(latLngs[i].latitude, latLngs[i].longitude) + ) + } + } + } + }) initEvent() @@ -139,13 +199,16 @@ val currentTimeMillis = System.currentTimeMillis() val startTime = currentTimeMillis.timestampToCompleteDate() - model = NewInspectionModel( + //设置标题和时间 + homeView.inspectNameView.text = value + homeView.inspectTimeView.text = startTime + + newInspectionModel = NewInspectionModel( currentTimeMillis.id(), value, startTime, "", currentTimeMillis.timestampToDate(), 0.0, 0.0, 0.0, 0.0, - "", userData.name!! + ArrayList(), userData.name!! ) - startInspection() } override fun onCancelClick() { @@ -158,7 +221,7 @@ menuButtonEvent() homeView.newEventButton.setOnClickListener { - if (model.id.isNullOrBlank()) { + if (newInspectionModel == null) { "还未开始巡检,无法新建事件".show(requireContext()) return@setOnClickListener } @@ -169,15 +232,12 @@ .setActionItemTitle(listOf("巡检记录", "事件记录")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - //获取当前定位 - val lng = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LONGITUDE, "0.0" - ) as String - val lat = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LATITUDE, "0.0" - ) as String requireContext().navigatePageTo( - addAll(position.toString(), model.id, model.name, lng, lat) + addAll( + position.toString(), + newInspectionModel!!.id, newInspectionModel!!.name, + latLngs.last.longitude.toString(), latLngs.last.latitude.toString() + ) ) } }).build().show() @@ -253,46 +313,6 @@ } } - /** - * 开始巡检,获取坐标 - * */ - private fun startInspection() { - //设置标题和时间 - homeView.inspectNameView.text = model.name - homeView.inspectTimeView.text = model.startTime - aMap.addOnMyLocationChangeListener { - // 保存最新的一次位置,sp不支持保存double - SaveKeyValues.putValue(LocaleConstant.CURRENT_LONGITUDE, it.longitude.toString()) - SaveKeyValues.putValue(LocaleConstant.CURRENT_LATITUDE, it.latitude.toString()) - //设置起始经纬度 - if (model.startLng == 0.0 || model.startLat == 0.0) { - model.startLng = it.longitude - model.startLat = it.latitude - } - // 包装routes - if (routeList.size <= 2) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } else { - //计算上一个点和当前点的距离 - val last = routeList.size - 1 - val distance = AMapUtils.calculateLineDistance( - LatLng(routeList[last].lat, routeList[last].lng), - LatLng(it.latitude, it.longitude) - ) - if (distance >= 10) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } - } - model.routes = gson.toJson(routeList) - } - } - override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.BLUETOOTH_ON -> { @@ -475,27 +495,24 @@ * * 如果保存到本地,则需要设置标识位,然后finish当前页面并提示 * */ - val endLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val endLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String + if (newInspectionModel == null) { + "保存失败".show(requireContext()) + return + } inspectionViewModel.addInspection( - id = model.id, - name = model.name, - startTime = model.startTime, + id = newInspectionModel!!.id, + name = newInspectionModel!!.name, + startTime = newInspectionModel!!.startTime, endTime = System.currentTimeMillis().timestampToCompleteDate(), - date = model.date, - startLng = model.startLng, - startLat = model.startLat, - endLng = endLng.toDouble(), - endLat = endLat.toDouble(), - routes = model.routes, + date = newInspectionModel!!.date, + startLng = newInspectionModel!!.startLng, + startLat = newInspectionModel!!.startLat, + endLng = latLngs.last.longitude, + endLat = latLngs.last.latitude, + routes = gson.toJson(newInspectionModel!!.routes), user = userData.name!! ) - inspectionViewModel.addInspectionResult.observe(this) { - if (it.code == 200) { - "巡检记录保存成功".show(requireContext()) - } - } } /** @@ -554,28 +571,19 @@ } isGeneratingTask = true - val currentLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val currentLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String eventViewModel.addEventTask( id = UUID.randomUUID().toString(), - inspectionId = model.id, - name = model.name, + inspectionId = newInspectionModel!!.id, + name = newInspectionModel!!.name, createTime = System.currentTimeMillis().timestampToCompleteDate(), type = "报警事件", - lng = currentLng.toDouble(), - lat = currentLat.toDouble(), + lng = latLngs.last.longitude, + lat = latLngs.last.latitude, data = maxValue.toDouble(), images = "", description = "自动报警记录", user = userData.name!! ) - eventViewModel.addEventResult.observe(this) { model -> - if (model.code == 200) { - "保存成功".show(requireContext()) - isGeneratingTask = false - alarmCount = 0 - } - } } /***以下是地图生命周期管理************************************************************************/ @@ -598,5 +606,6 @@ override fun onDestroy() { super.onDestroy() homeView.mapView.onDestroy() + LocationHub.get.stopLocation() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt index 4a898ce..2f81ffa 100644 --- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt @@ -16,23 +16,23 @@ import android.view.ViewGroup import android.widget.LinearLayout import androidx.fragment.app.Fragment +import com.amap.api.location.AMapLocation import com.amap.api.maps.AMap -import com.amap.api.maps.AMapOptions -import com.amap.api.maps.AMapUtils import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.CameraPosition import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.PolylineOptions import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.callback.OnDataAddListener import com.casic.birmm.inspect.extensions.addAll import com.casic.birmm.inspect.extensions.id import com.casic.birmm.inspect.extensions.toDataModel import com.casic.birmm.inspect.extensions.toDeviceCode import com.casic.birmm.inspect.model.NewInspectionModel import com.casic.birmm.inspect.model.RoutePointModel -import com.casic.birmm.inspect.utils.DataBaseManager -import com.casic.birmm.inspect.utils.LoadingDialogHub -import com.casic.birmm.inspect.utils.LocaleConstant -import com.casic.birmm.inspect.utils.SoundPoolHelper +import com.casic.birmm.inspect.single.view.NewEventActivity +import com.casic.birmm.inspect.utils.* import com.google.gson.Gson import com.pengxh.kt.lite.extensions.* import com.pengxh.kt.lite.utils.SaveKeyValues @@ -53,19 +53,18 @@ private val kTag = "HomePageFragment" private val gson by lazy { Gson() } + private val blueToothBeans: MutableList = ArrayList()//搜索展示列表 + private val latLngs = LinkedList() private lateinit var homeView: View private lateinit var vibrator: Vibrator private lateinit var aMap: AMap - private lateinit var locationStyle: MyLocationStyle private lateinit var weakReferenceHandler: WeakReferenceHandler - private var model = NewInspectionModel()//新建巡检数据结构模型 + private var newInspectionModel: NewInspectionModel? = null//新建巡检数据结构模型 private var isBluetoothOn = true private var curConnectState = false - private var blueToothBeans: MutableList = ArrayList()//搜索展示列表 private var currentDevice: BluetoothDevice? = null// 当前蓝牙设备 private var isGeneratingTask = false private var alarmCount = 0 - private var routeList: MutableList = ArrayList()//路线点集和 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -92,15 +91,59 @@ homeView.mapView.onCreate(savedInstanceState) aMap = homeView.mapView.map + val uiSettings = aMap.uiSettings - uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER - uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 + uiSettings.isCompassEnabled = true + uiSettings.isZoomControlsEnabled = true + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + //显示定位小蓝点 - locationStyle = MyLocationStyle() + val locationStyle = MyLocationStyle() locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true - aMap.moveCamera(CameraUpdateFactory.zoomTo(16.toFloat())) + aMap.mapType = AMap.MAP_TYPE_NORMAL + + LocationHub.get.getLocationByAMap(requireContext(), object : LocationHub.ILocationListener { + override fun onAMapLocationGet(aMapLocation: AMapLocation?) { + if (aMapLocation == null) { + "当前信号弱,无法定位".show(requireContext()) + return + } + + val longitude = aMapLocation.longitude.toString() + val latitude = aMapLocation.latitude.toString() + + Log.d(kTag, "startInspection => [${longitude},${latitude}]") + val latLng = LatLng(latitude.toDouble(), longitude.toDouble()) + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 1500, null) + + //newInspectionModel已完成初始化,说明已经新建巡检任务,数据可以开始保存了 + if (newInspectionModel != null) { + latLngs.add(latLng) + + //绘制线 + aMap.addPolyline( + PolylineOptions().addAll(latLngs).width(10f).color(Color.RED) + ) + + //设置起始经纬度 + newInspectionModel!!.startLng = latLngs.first.longitude + newInspectionModel!!.startLat = latLngs.first.latitude + + // 包装routes,每五个点取一次经纬度 + for (i in 0..latLngs.size step 5) { + newInspectionModel!!.routes.add( + RoutePointModel(latLngs[i].latitude, latLngs[i].longitude) + ) + } + } + } + }) initEvent() @@ -117,13 +160,16 @@ val currentTimeMillis = System.currentTimeMillis() val startTime = currentTimeMillis.timestampToCompleteDate() - model = NewInspectionModel( + //设置标题和时间 + homeView.inspectNameView.text = value + homeView.inspectTimeView.text = startTime + + newInspectionModel = NewInspectionModel( currentTimeMillis.id(), value, startTime, "", currentTimeMillis.timestampToDate(), 0.0, 0.0, 0.0, 0.0, - "", "超级管理员" + ArrayList(), "超级管理员" ) - startInspection() } override fun onCancelClick() { @@ -136,7 +182,7 @@ menuButtonEvent() homeView.newEventButton.setOnClickListener { - if (model.id.isNullOrBlank()) { + if (newInspectionModel == null) { "还未开始巡检,无法新建事件".show(requireContext()) return@setOnClickListener } @@ -147,15 +193,12 @@ .setActionItemTitle(listOf("巡检记录", "事件记录")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - //获取当前定位 - val lng = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LONGITUDE, "0.0" - ) as String - val lat = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LATITUDE, "0.0" - ) as String - requireContext().navigatePageTo( - addAll(position.toString(), model.id, model.name, lng, lat) + requireContext().navigatePageTo( + addAll( + position.toString(), + newInspectionModel!!.id, newInspectionModel!!.name, + latLngs.last.longitude.toString(), latLngs.last.latitude.toString() + ) ) } }).build().show() @@ -231,46 +274,6 @@ } } - /** - * 开始巡检,获取坐标 - * */ - private fun startInspection() { - //设置标题和时间 - homeView.inspectNameView.text = model.name - homeView.inspectTimeView.text = model.startTime - aMap.addOnMyLocationChangeListener { - // 保存最新的一次位置,sp不支持保存double - SaveKeyValues.putValue(LocaleConstant.CURRENT_LONGITUDE, it.longitude.toString()) - SaveKeyValues.putValue(LocaleConstant.CURRENT_LATITUDE, it.latitude.toString()) - //设置起始经纬度 - if (model.startLng == 0.0 || model.startLat == 0.0) { - model.startLng = it.longitude - model.startLat = it.latitude - } - // 包装routes - if (routeList.size <= 2) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } else { - //计算上一个点和当前点的距离 - val last = routeList.size - 1 - val distance = AMapUtils.calculateLineDistance( - LatLng(routeList[last].lat, routeList[last].lng), - LatLng(it.latitude, it.longitude) - ) - if (distance >= 10) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } - } - model.routes = gson.toJson(routeList) - } - } - override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.BLUETOOTH_ON -> { @@ -453,22 +456,33 @@ * * 如果保存到本地,则需要设置标识位,然后finish当前页面并提示 * */ - val endLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val endLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String + if (newInspectionModel == null) { + "保存失败".show(requireContext()) + return + } + LoadingDialogHub.show(requireActivity(), "数据保存中,请稍后...") DataBaseManager.get.addInspection( - inspectionId = model.id, - inspectionName = model.name, - startTime = model.startTime, + inspectionId = newInspectionModel!!.id, + inspectionName = newInspectionModel!!.name, + startTime = newInspectionModel!!.startTime, endTime = System.currentTimeMillis().timestampToCompleteDate(), - date = model.date, - startLng = model.startLng, - startLat = model.startLat, - endLng = endLng.toDouble(), - endLat = endLat.toDouble(), - routes = model.routes + date = newInspectionModel!!.date, + startLng = newInspectionModel!!.startLng, + startLat = newInspectionModel!!.startLat, + endLng = latLngs.last.longitude, + endLat = latLngs.last.latitude, + routes = newInspectionModel!!.routes, + object : OnDataAddListener { + override fun onAddSuccess() { + LoadingDialogHub.dismiss() + "巡检记录保存成功".show(requireContext()) + //清除缓存 + blueToothBeans.clear() + latLngs.clear() + } + } ) - "巡检记录保存成功".show(requireContext()) } /** @@ -527,16 +541,14 @@ } isGeneratingTask = true - val currentLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val currentLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String DataBaseManager.get.addEvent( taskId = UUID.randomUUID().toString(), - inspectionId = model.id, - eventTitle = model.name, + inspectionId = newInspectionModel!!.id, + eventTitle = newInspectionModel!!.name, createTime = System.currentTimeMillis().timestampToCompleteDate(), type = "报警事件", - lng = currentLng.toDouble(), - lat = currentLat.toDouble(), + lng = latLngs.last.longitude, + lat = latLngs.last.latitude, data = maxValue.toDouble(), images = "", description = "自动报警记录" @@ -566,5 +578,6 @@ override fun onDestroy() { super.onDestroy() homeView.mapView.onDestroy() + LocationHub.get.stopLocation() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt index a757dfb..b60eafe 100644 --- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt @@ -17,12 +17,13 @@ import android.widget.LinearLayout import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import com.amap.api.location.AMapLocation import com.amap.api.maps.AMap -import com.amap.api.maps.AMapOptions -import com.amap.api.maps.AMapUtils import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.CameraPosition import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.PolylineOptions import com.casic.birmm.inspect.R import com.casic.birmm.inspect.extensions.addAll import com.casic.birmm.inspect.extensions.id @@ -33,6 +34,7 @@ import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.LoadingDialogHub import com.casic.birmm.inspect.utils.LocaleConstant +import com.casic.birmm.inspect.utils.LocationHub import com.casic.birmm.inspect.utils.SoundPoolHelper import com.casic.birmm.inspect.view.NewEventActivity import com.casic.birmm.inspect.vm.EventViewModel @@ -58,22 +60,21 @@ private val kTag = "HomePageFragment" private val gson by lazy { Gson() } + private val blueToothBeans: MutableList = ArrayList()//搜索展示列表 + private val latLngs = LinkedList() private lateinit var homeView: View private lateinit var userData: UserInfoModel.DataModel private lateinit var vibrator: Vibrator private lateinit var eventViewModel: EventViewModel private lateinit var inspectionViewModel: InspectionViewModel private lateinit var aMap: AMap - private lateinit var locationStyle: MyLocationStyle private lateinit var weakReferenceHandler: WeakReferenceHandler - private var model = NewInspectionModel()//新建巡检数据结构模型 + private var newInspectionModel: NewInspectionModel? = null//新建巡检数据结构模型 private var isBluetoothOn = true private var curConnectState = false - private var blueToothBeans: MutableList = ArrayList()//搜索展示列表 private var currentDevice: BluetoothDevice? = null// 当前蓝牙设备 private var isGeneratingTask = false private var alarmCount = 0 - private var routeList: MutableList = ArrayList()//路线点集和 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -89,12 +90,27 @@ vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] + eventViewModel.addEventResult.observe(viewLifecycleOwner) { + if (it.code == 200) { + "保存成功".show(requireContext()) + isGeneratingTask = false + alarmCount = 0 + } + } + inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] inspectionViewModel.loadState.observe(viewLifecycleOwner) { when (it) { is LoadState.Loading -> { LoadingDialogHub.show(requireActivity(), "保存中,请稍后...") } + is LoadState.Success -> { + LoadingDialogHub.dismiss() + "巡检记录保存成功".show(requireContext()) + //清除缓存 + blueToothBeans.clear() + latLngs.clear() + } else -> LoadingDialogHub.dismiss() } } @@ -114,15 +130,59 @@ homeView.mapView.onCreate(savedInstanceState) aMap = homeView.mapView.map + val uiSettings = aMap.uiSettings - uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER - uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 + uiSettings.isCompassEnabled = true + uiSettings.isZoomControlsEnabled = true + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + //显示定位小蓝点 - locationStyle = MyLocationStyle() + val locationStyle = MyLocationStyle() locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true - aMap.moveCamera(CameraUpdateFactory.zoomTo(16.toFloat())) + aMap.mapType = AMap.MAP_TYPE_NORMAL + + LocationHub.get.getLocationByAMap(requireContext(), object : LocationHub.ILocationListener { + override fun onAMapLocationGet(aMapLocation: AMapLocation?) { + if (aMapLocation == null) { + "当前信号弱,无法定位".show(requireContext()) + return + } + + val longitude = aMapLocation.longitude.toString() + val latitude = aMapLocation.latitude.toString() + + Log.d(kTag, "startInspection => [${longitude},${latitude}]") + val latLng = LatLng(latitude.toDouble(), longitude.toDouble()) + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 1500, null) + + //newInspectionModel已完成初始化,说明已经新建巡检任务,数据可以开始保存了 + if (newInspectionModel != null) { + latLngs.add(latLng) + + //绘制线 + aMap.addPolyline( + PolylineOptions().addAll(latLngs).width(10f).color(Color.RED) + ) + + //设置起始经纬度 + newInspectionModel!!.startLng = latLngs.first.longitude + newInspectionModel!!.startLat = latLngs.first.latitude + + // 包装routes,每五个点取一次经纬度 + for (i in 0..latLngs.size step 5) { + newInspectionModel!!.routes.add( + RoutePointModel(latLngs[i].latitude, latLngs[i].longitude) + ) + } + } + } + }) initEvent() @@ -139,13 +199,16 @@ val currentTimeMillis = System.currentTimeMillis() val startTime = currentTimeMillis.timestampToCompleteDate() - model = NewInspectionModel( + //设置标题和时间 + homeView.inspectNameView.text = value + homeView.inspectTimeView.text = startTime + + newInspectionModel = NewInspectionModel( currentTimeMillis.id(), value, startTime, "", currentTimeMillis.timestampToDate(), 0.0, 0.0, 0.0, 0.0, - "", userData.name!! + ArrayList(), userData.name!! ) - startInspection() } override fun onCancelClick() { @@ -158,7 +221,7 @@ menuButtonEvent() homeView.newEventButton.setOnClickListener { - if (model.id.isNullOrBlank()) { + if (newInspectionModel == null) { "还未开始巡检,无法新建事件".show(requireContext()) return@setOnClickListener } @@ -169,15 +232,12 @@ .setActionItemTitle(listOf("巡检记录", "事件记录")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - //获取当前定位 - val lng = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LONGITUDE, "0.0" - ) as String - val lat = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LATITUDE, "0.0" - ) as String requireContext().navigatePageTo( - addAll(position.toString(), model.id, model.name, lng, lat) + addAll( + position.toString(), + newInspectionModel!!.id, newInspectionModel!!.name, + latLngs.last.longitude.toString(), latLngs.last.latitude.toString() + ) ) } }).build().show() @@ -253,46 +313,6 @@ } } - /** - * 开始巡检,获取坐标 - * */ - private fun startInspection() { - //设置标题和时间 - homeView.inspectNameView.text = model.name - homeView.inspectTimeView.text = model.startTime - aMap.addOnMyLocationChangeListener { - // 保存最新的一次位置,sp不支持保存double - SaveKeyValues.putValue(LocaleConstant.CURRENT_LONGITUDE, it.longitude.toString()) - SaveKeyValues.putValue(LocaleConstant.CURRENT_LATITUDE, it.latitude.toString()) - //设置起始经纬度 - if (model.startLng == 0.0 || model.startLat == 0.0) { - model.startLng = it.longitude - model.startLat = it.latitude - } - // 包装routes - if (routeList.size <= 2) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } else { - //计算上一个点和当前点的距离 - val last = routeList.size - 1 - val distance = AMapUtils.calculateLineDistance( - LatLng(routeList[last].lat, routeList[last].lng), - LatLng(it.latitude, it.longitude) - ) - if (distance >= 10) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } - } - model.routes = gson.toJson(routeList) - } - } - override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.BLUETOOTH_ON -> { @@ -475,27 +495,24 @@ * * 如果保存到本地,则需要设置标识位,然后finish当前页面并提示 * */ - val endLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val endLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String + if (newInspectionModel == null) { + "保存失败".show(requireContext()) + return + } inspectionViewModel.addInspection( - id = model.id, - name = model.name, - startTime = model.startTime, + id = newInspectionModel!!.id, + name = newInspectionModel!!.name, + startTime = newInspectionModel!!.startTime, endTime = System.currentTimeMillis().timestampToCompleteDate(), - date = model.date, - startLng = model.startLng, - startLat = model.startLat, - endLng = endLng.toDouble(), - endLat = endLat.toDouble(), - routes = model.routes, + date = newInspectionModel!!.date, + startLng = newInspectionModel!!.startLng, + startLat = newInspectionModel!!.startLat, + endLng = latLngs.last.longitude, + endLat = latLngs.last.latitude, + routes = gson.toJson(newInspectionModel!!.routes), user = userData.name!! ) - inspectionViewModel.addInspectionResult.observe(this) { - if (it.code == 200) { - "巡检记录保存成功".show(requireContext()) - } - } } /** @@ -554,28 +571,19 @@ } isGeneratingTask = true - val currentLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val currentLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String eventViewModel.addEventTask( id = UUID.randomUUID().toString(), - inspectionId = model.id, - name = model.name, + inspectionId = newInspectionModel!!.id, + name = newInspectionModel!!.name, createTime = System.currentTimeMillis().timestampToCompleteDate(), type = "报警事件", - lng = currentLng.toDouble(), - lat = currentLat.toDouble(), + lng = latLngs.last.longitude, + lat = latLngs.last.latitude, data = maxValue.toDouble(), images = "", description = "自动报警记录", user = userData.name!! ) - eventViewModel.addEventResult.observe(this) { model -> - if (model.code == 200) { - "保存成功".show(requireContext()) - isGeneratingTask = false - alarmCount = 0 - } - } } /***以下是地图生命周期管理************************************************************************/ @@ -598,5 +606,6 @@ override fun onDestroy() { super.onDestroy() homeView.mapView.onDestroy() + LocationHub.get.stopLocation() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt index 4a898ce..2f81ffa 100644 --- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/HomePageFragment.kt @@ -16,23 +16,23 @@ import android.view.ViewGroup import android.widget.LinearLayout import androidx.fragment.app.Fragment +import com.amap.api.location.AMapLocation import com.amap.api.maps.AMap -import com.amap.api.maps.AMapOptions -import com.amap.api.maps.AMapUtils import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.CameraPosition import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.PolylineOptions import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.callback.OnDataAddListener import com.casic.birmm.inspect.extensions.addAll import com.casic.birmm.inspect.extensions.id import com.casic.birmm.inspect.extensions.toDataModel import com.casic.birmm.inspect.extensions.toDeviceCode import com.casic.birmm.inspect.model.NewInspectionModel import com.casic.birmm.inspect.model.RoutePointModel -import com.casic.birmm.inspect.utils.DataBaseManager -import com.casic.birmm.inspect.utils.LoadingDialogHub -import com.casic.birmm.inspect.utils.LocaleConstant -import com.casic.birmm.inspect.utils.SoundPoolHelper +import com.casic.birmm.inspect.single.view.NewEventActivity +import com.casic.birmm.inspect.utils.* import com.google.gson.Gson import com.pengxh.kt.lite.extensions.* import com.pengxh.kt.lite.utils.SaveKeyValues @@ -53,19 +53,18 @@ private val kTag = "HomePageFragment" private val gson by lazy { Gson() } + private val blueToothBeans: MutableList = ArrayList()//搜索展示列表 + private val latLngs = LinkedList() private lateinit var homeView: View private lateinit var vibrator: Vibrator private lateinit var aMap: AMap - private lateinit var locationStyle: MyLocationStyle private lateinit var weakReferenceHandler: WeakReferenceHandler - private var model = NewInspectionModel()//新建巡检数据结构模型 + private var newInspectionModel: NewInspectionModel? = null//新建巡检数据结构模型 private var isBluetoothOn = true private var curConnectState = false - private var blueToothBeans: MutableList = ArrayList()//搜索展示列表 private var currentDevice: BluetoothDevice? = null// 当前蓝牙设备 private var isGeneratingTask = false private var alarmCount = 0 - private var routeList: MutableList = ArrayList()//路线点集和 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -92,15 +91,59 @@ homeView.mapView.onCreate(savedInstanceState) aMap = homeView.mapView.map + val uiSettings = aMap.uiSettings - uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER - uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 + uiSettings.isCompassEnabled = true + uiSettings.isZoomControlsEnabled = true + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + //显示定位小蓝点 - locationStyle = MyLocationStyle() + val locationStyle = MyLocationStyle() locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true - aMap.moveCamera(CameraUpdateFactory.zoomTo(16.toFloat())) + aMap.mapType = AMap.MAP_TYPE_NORMAL + + LocationHub.get.getLocationByAMap(requireContext(), object : LocationHub.ILocationListener { + override fun onAMapLocationGet(aMapLocation: AMapLocation?) { + if (aMapLocation == null) { + "当前信号弱,无法定位".show(requireContext()) + return + } + + val longitude = aMapLocation.longitude.toString() + val latitude = aMapLocation.latitude.toString() + + Log.d(kTag, "startInspection => [${longitude},${latitude}]") + val latLng = LatLng(latitude.toDouble(), longitude.toDouble()) + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 1500, null) + + //newInspectionModel已完成初始化,说明已经新建巡检任务,数据可以开始保存了 + if (newInspectionModel != null) { + latLngs.add(latLng) + + //绘制线 + aMap.addPolyline( + PolylineOptions().addAll(latLngs).width(10f).color(Color.RED) + ) + + //设置起始经纬度 + newInspectionModel!!.startLng = latLngs.first.longitude + newInspectionModel!!.startLat = latLngs.first.latitude + + // 包装routes,每五个点取一次经纬度 + for (i in 0..latLngs.size step 5) { + newInspectionModel!!.routes.add( + RoutePointModel(latLngs[i].latitude, latLngs[i].longitude) + ) + } + } + } + }) initEvent() @@ -117,13 +160,16 @@ val currentTimeMillis = System.currentTimeMillis() val startTime = currentTimeMillis.timestampToCompleteDate() - model = NewInspectionModel( + //设置标题和时间 + homeView.inspectNameView.text = value + homeView.inspectTimeView.text = startTime + + newInspectionModel = NewInspectionModel( currentTimeMillis.id(), value, startTime, "", currentTimeMillis.timestampToDate(), 0.0, 0.0, 0.0, 0.0, - "", "超级管理员" + ArrayList(), "超级管理员" ) - startInspection() } override fun onCancelClick() { @@ -136,7 +182,7 @@ menuButtonEvent() homeView.newEventButton.setOnClickListener { - if (model.id.isNullOrBlank()) { + if (newInspectionModel == null) { "还未开始巡检,无法新建事件".show(requireContext()) return@setOnClickListener } @@ -147,15 +193,12 @@ .setActionItemTitle(listOf("巡检记录", "事件记录")) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - //获取当前定位 - val lng = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LONGITUDE, "0.0" - ) as String - val lat = SaveKeyValues.getValue( - LocaleConstant.CURRENT_LATITUDE, "0.0" - ) as String - requireContext().navigatePageTo( - addAll(position.toString(), model.id, model.name, lng, lat) + requireContext().navigatePageTo( + addAll( + position.toString(), + newInspectionModel!!.id, newInspectionModel!!.name, + latLngs.last.longitude.toString(), latLngs.last.latitude.toString() + ) ) } }).build().show() @@ -231,46 +274,6 @@ } } - /** - * 开始巡检,获取坐标 - * */ - private fun startInspection() { - //设置标题和时间 - homeView.inspectNameView.text = model.name - homeView.inspectTimeView.text = model.startTime - aMap.addOnMyLocationChangeListener { - // 保存最新的一次位置,sp不支持保存double - SaveKeyValues.putValue(LocaleConstant.CURRENT_LONGITUDE, it.longitude.toString()) - SaveKeyValues.putValue(LocaleConstant.CURRENT_LATITUDE, it.latitude.toString()) - //设置起始经纬度 - if (model.startLng == 0.0 || model.startLat == 0.0) { - model.startLng = it.longitude - model.startLat = it.latitude - } - // 包装routes - if (routeList.size <= 2) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } else { - //计算上一个点和当前点的距离 - val last = routeList.size - 1 - val distance = AMapUtils.calculateLineDistance( - LatLng(routeList[last].lat, routeList[last].lng), - LatLng(it.latitude, it.longitude) - ) - if (distance >= 10) { - val route = RoutePointModel() - route.lng = it.longitude - route.lat = it.latitude - routeList.add(route) - } - } - model.routes = gson.toJson(routeList) - } - } - override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.BLUETOOTH_ON -> { @@ -453,22 +456,33 @@ * * 如果保存到本地,则需要设置标识位,然后finish当前页面并提示 * */ - val endLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val endLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String + if (newInspectionModel == null) { + "保存失败".show(requireContext()) + return + } + LoadingDialogHub.show(requireActivity(), "数据保存中,请稍后...") DataBaseManager.get.addInspection( - inspectionId = model.id, - inspectionName = model.name, - startTime = model.startTime, + inspectionId = newInspectionModel!!.id, + inspectionName = newInspectionModel!!.name, + startTime = newInspectionModel!!.startTime, endTime = System.currentTimeMillis().timestampToCompleteDate(), - date = model.date, - startLng = model.startLng, - startLat = model.startLat, - endLng = endLng.toDouble(), - endLat = endLat.toDouble(), - routes = model.routes + date = newInspectionModel!!.date, + startLng = newInspectionModel!!.startLng, + startLat = newInspectionModel!!.startLat, + endLng = latLngs.last.longitude, + endLat = latLngs.last.latitude, + routes = newInspectionModel!!.routes, + object : OnDataAddListener { + override fun onAddSuccess() { + LoadingDialogHub.dismiss() + "巡检记录保存成功".show(requireContext()) + //清除缓存 + blueToothBeans.clear() + latLngs.clear() + } + } ) - "巡检记录保存成功".show(requireContext()) } /** @@ -527,16 +541,14 @@ } isGeneratingTask = true - val currentLng = SaveKeyValues.getValue(LocaleConstant.CURRENT_LONGITUDE, "0.0") as String - val currentLat = SaveKeyValues.getValue(LocaleConstant.CURRENT_LATITUDE, "0.0") as String DataBaseManager.get.addEvent( taskId = UUID.randomUUID().toString(), - inspectionId = model.id, - eventTitle = model.name, + inspectionId = newInspectionModel!!.id, + eventTitle = newInspectionModel!!.name, createTime = System.currentTimeMillis().timestampToCompleteDate(), type = "报警事件", - lng = currentLng.toDouble(), - lat = currentLat.toDouble(), + lng = latLngs.last.longitude, + lat = latLngs.last.latitude, data = maxValue.toDouble(), images = "", description = "自动报警记录" @@ -566,5 +578,6 @@ override fun onDestroy() { super.onDestroy() homeView.mapView.onDestroy() + LocationHub.get.stopLocation() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt index 1d2dae9..70b88fa 100644 --- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt @@ -36,18 +36,17 @@ emptyView.show("抱歉,无法查询到相关记录", null) } else { emptyView.hide() - val eventListAdapter = - object : NormalRecyclerAdapter( - R.layout.item_event_rv_l, dataBeans + val eventListAdapter = object : NormalRecyclerAdapter( + R.layout.item_event_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, item: TaskEventLocalBean ) { - override fun convertView( - viewHolder: ViewHolder, position: Int, item: TaskEventLocalBean - ) { - if (!item.images.isNullOrBlank()) { - val imageArray = item.images!!.split(",") - lifecycleScope.launch(Dispatchers.Main) { - try { - val drawable = withContext(Dispatchers.IO) { + if (!item.images.isNullOrBlank()) { + val imageArray = item.images!!.split(",") + lifecycleScope.launch(Dispatchers.Main) { + try { + val drawable = withContext(Dispatchers.IO) { Glide.with(requireContext()).load(imageArray[0]) .submit().get() }