diff --git a/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt index 35980b9..faf8599 100644 --- a/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt +++ b/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt @@ -1,14 +1,12 @@ package com.casic.br.ktd.netty.tcp import android.util.Log -import com.casic.br.ktd.base.BaseApplication import com.casic.br.ktd.extensions.covertAngleValue import com.casic.br.ktd.extensions.covertDataValue import com.casic.br.ktd.extensions.toUnsignedByteArray import com.casic.br.ktd.model.SensorDataModel import com.casic.br.ktd.utils.LocaleConstant -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.utils.BroadcastManager +import com.casic.br.ktd.view.InspectionActivity class SocketManager private constructor() : ISocketListener { @@ -16,7 +14,7 @@ private var nettyClient: SocketClient = SocketClient() companion object { - val instance: SocketManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() } + val get: SocketManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() } } fun connectNetty(hostname: String, port: Int) { @@ -85,10 +83,17 @@ dataModel.vertical = verticalBytes.covertAngleValue() //{"horizontal":26.21,"laser":45621,"methane":79846,"methaneState":"正常","vertical":13.91} - BroadcastManager.obtainInstance(BaseApplication.get()).sendBroadcast( - LocaleConstant.ACTION_UPDATE_DATA, dataModel.toJson() - ) + val message = InspectionActivity.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.UPDATE_DATA_MESSAGE_CODE + message.obj = dataModel + InspectionActivity.weakReferenceHandler.sendMessage(message) } + +// val dataModel = SensorDataModel((0..1500).random(), "激光未打开", 0, 0.0, 0.0) +// val message = InspectionActivity.weakReferenceHandler.obtainMessage() +// message.what = LocaleConstant.UPDATE_DATA_MESSAGE_CODE +// message.obj = dataModel +// InspectionActivity.weakReferenceHandler.sendMessage(message) } override fun onServiceStatusConnectChanged(statusCode: Byte) { diff --git a/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt index 35980b9..faf8599 100644 --- a/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt +++ b/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt @@ -1,14 +1,12 @@ package com.casic.br.ktd.netty.tcp import android.util.Log -import com.casic.br.ktd.base.BaseApplication import com.casic.br.ktd.extensions.covertAngleValue import com.casic.br.ktd.extensions.covertDataValue import com.casic.br.ktd.extensions.toUnsignedByteArray import com.casic.br.ktd.model.SensorDataModel import com.casic.br.ktd.utils.LocaleConstant -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.utils.BroadcastManager +import com.casic.br.ktd.view.InspectionActivity class SocketManager private constructor() : ISocketListener { @@ -16,7 +14,7 @@ private var nettyClient: SocketClient = SocketClient() companion object { - val instance: SocketManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() } + val get: SocketManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() } } fun connectNetty(hostname: String, port: Int) { @@ -85,10 +83,17 @@ dataModel.vertical = verticalBytes.covertAngleValue() //{"horizontal":26.21,"laser":45621,"methane":79846,"methaneState":"正常","vertical":13.91} - BroadcastManager.obtainInstance(BaseApplication.get()).sendBroadcast( - LocaleConstant.ACTION_UPDATE_DATA, dataModel.toJson() - ) + val message = InspectionActivity.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.UPDATE_DATA_MESSAGE_CODE + message.obj = dataModel + InspectionActivity.weakReferenceHandler.sendMessage(message) } + +// val dataModel = SensorDataModel((0..1500).random(), "激光未打开", 0, 0.0, 0.0) +// val message = InspectionActivity.weakReferenceHandler.obtainMessage() +// message.what = LocaleConstant.UPDATE_DATA_MESSAGE_CODE +// message.obj = dataModel +// InspectionActivity.weakReferenceHandler.sendMessage(message) } override fun onServiceStatusConnectChanged(statusCode: Byte) { diff --git a/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt index 8412bf8..3ac19a6 100644 --- a/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt @@ -63,8 +63,8 @@ const val LOCATION_UDP_SERVER = "udpServer" const val LOCATION_UDP_PORT = 7777 - //BroadcastReceiver Action - const val ACTION_UPDATE_DATA = "update" + const val STOP_DEVICE_MESSAGE_CODE = 2023071401 + const val UPDATE_DATA_MESSAGE_CODE = 2023110401 //SharedPreferences const val ALARM_THRESHOLD = "alarmThreshold" diff --git a/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt index 35980b9..faf8599 100644 --- a/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt +++ b/app/src/main/java/com/casic/br/ktd/netty/tcp/SocketManager.kt @@ -1,14 +1,12 @@ package com.casic.br.ktd.netty.tcp import android.util.Log -import com.casic.br.ktd.base.BaseApplication import com.casic.br.ktd.extensions.covertAngleValue import com.casic.br.ktd.extensions.covertDataValue import com.casic.br.ktd.extensions.toUnsignedByteArray import com.casic.br.ktd.model.SensorDataModel import com.casic.br.ktd.utils.LocaleConstant -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.utils.BroadcastManager +import com.casic.br.ktd.view.InspectionActivity class SocketManager private constructor() : ISocketListener { @@ -16,7 +14,7 @@ private var nettyClient: SocketClient = SocketClient() companion object { - val instance: SocketManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() } + val get: SocketManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() } } fun connectNetty(hostname: String, port: Int) { @@ -85,10 +83,17 @@ dataModel.vertical = verticalBytes.covertAngleValue() //{"horizontal":26.21,"laser":45621,"methane":79846,"methaneState":"正常","vertical":13.91} - BroadcastManager.obtainInstance(BaseApplication.get()).sendBroadcast( - LocaleConstant.ACTION_UPDATE_DATA, dataModel.toJson() - ) + val message = InspectionActivity.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.UPDATE_DATA_MESSAGE_CODE + message.obj = dataModel + InspectionActivity.weakReferenceHandler.sendMessage(message) } + +// val dataModel = SensorDataModel((0..1500).random(), "激光未打开", 0, 0.0, 0.0) +// val message = InspectionActivity.weakReferenceHandler.obtainMessage() +// message.what = LocaleConstant.UPDATE_DATA_MESSAGE_CODE +// message.obj = dataModel +// InspectionActivity.weakReferenceHandler.sendMessage(message) } override fun onServiceStatusConnectChanged(statusCode: Byte) { diff --git a/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt index 8412bf8..3ac19a6 100644 --- a/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/ktd/utils/LocaleConstant.kt @@ -63,8 +63,8 @@ const val LOCATION_UDP_SERVER = "udpServer" const val LOCATION_UDP_PORT = 7777 - //BroadcastReceiver Action - const val ACTION_UPDATE_DATA = "update" + const val STOP_DEVICE_MESSAGE_CODE = 2023071401 + const val UPDATE_DATA_MESSAGE_CODE = 2023110401 //SharedPreferences const val ALARM_THRESHOLD = "alarmThreshold" diff --git a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt index 5cec695..1fc814d 100644 --- a/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/InspectionActivity.kt @@ -1,9 +1,7 @@ package com.casic.br.ktd.view import android.annotation.SuppressLint -import android.content.BroadcastReceiver import android.content.Context -import android.content.Intent import android.graphics.Color import android.graphics.PixelFormat import android.os.Bundle @@ -48,7 +46,6 @@ import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.google.gson.Gson -import com.google.gson.reflect.TypeToken import com.gyf.immersionbar.ImmersionBar import com.hikvision.netsdk.* import com.pengxh.kt.lite.base.KotlinBaseActivity @@ -71,6 +68,10 @@ class InspectionActivity : KotlinBaseActivity(), SurfaceHolder.Callback, Handler.Callback { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private val kTag = "InspectionActivity" private val context = this@InspectionActivity private val hkSDK by lazy { HCNetSDK.getInstance() } @@ -112,7 +113,6 @@ private val xAxisLabels: MutableList = ArrayList() private val strengthEntries: MutableList = ArrayList() private var lineDataSets: MutableList = ArrayList() - private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var aMap: AMap private lateinit var uiSettings: UiSettings private lateinit var taskViewModel: TaskViewModel @@ -201,11 +201,6 @@ setDeviceConfig() /** - * 监听浓度数据 - * */ - setDataListener() - - /** * 地图和定位初始化 * */ setMapConfig(savedInstanceState) @@ -335,13 +330,13 @@ /** * TCP初始化 * ***/ - SocketManager.instance.connectNetty( + SocketManager.get.connectNetty( LocaleConstant.DEV_NET_IP, LocaleConstant.DEV_NET_PORT.toInt() ) tcpTimer.schedule(object : TimerTask() { override fun run() { if (isPreviewSuccess) { - SocketManager.instance.sendData(LocaleConstant.QUERY_DATA_COMMAND) + SocketManager.get.sendData(LocaleConstant.QUERY_DATA_COMMAND) } } }, 3000, LocaleConstant.DATA_TIMER_PERIOD) @@ -756,7 +751,9 @@ //关闭通道 hkSDK.NET_DVR_SerialStop(serialHandle) - weakReferenceHandler.sendEmptyMessageDelayed(2023071401, 10000) + weakReferenceHandler.sendEmptyMessageDelayed( + LocaleConstant.STOP_DEVICE_MESSAGE_CODE, 10000 + ) } else { "请先开启预览".show(context) } @@ -833,98 +830,92 @@ override fun onDestroy() { super.onDestroy() stopPreview() - BroadcastManager.obtainInstance(this).destroy(LocaleConstant.ACTION_UPDATE_DATA) binding.mapView.onDestroy() udpClient.release() - SocketManager.instance.close() + SocketManager.get.close() LocationHelper.get.stopLocation() } override fun handleMessage(msg: Message): Boolean { when (msg.what) { - //停止旋转 - 2023071401 -> hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_AUTO, 1) - } - return true - } + /** + * 停止旋转 + * */ + LocaleConstant.STOP_DEVICE_MESSAGE_CODE -> { + hkSDK.NET_DVR_PTZControl(previewHandle, PTZCommand.PAN_AUTO, 1) + } - private fun setDataListener() { - BroadcastManager.obtainInstance(this).addAction(object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (intent == null || context == null) { - return + /** + * 监听浓度数据 + * */ + LocaleConstant.UPDATE_DATA_MESSAGE_CODE -> { + val model = msg.obj as SensorDataModel + + binding.sensorStateView.text = model.methaneState + if (model.methaneState == "正常") { + binding.sensorStateView.setTextColor(Color.GREEN) + } else { + binding.sensorStateView.setTextColor(Color.RED) } - val deviceJson = intent.getStringExtra(Constant.BROADCAST_INTENT_DATA_KEY) - dataModel = gson.fromJson( - deviceJson, object : TypeToken() {}.type + val degree = resources.getString(R.string.degree) + binding.horizontalDegreeView.text = String.format("${model.horizontal}$degree") + binding.verticalDegreeView.text = String.format("${model.vertical}$degree") + binding.gasConcentrationView.text = String.format("${model.methane}ppm·m") + + if (model.methane >= gasAlarmRule) { + isAlarm = "1" + +// recordVideo() + + captureImage(true) + } + + /***折线图**************************************************************************/ + if (!initSuccess) { + binding.methaneLineChart.init() + //添加自定义Marker + val markerView = LineChartMarkerView(context) + markerView.chartView = binding.methaneLineChart + markerView.setXAxisDate(xAxisLabels) + binding.methaneLineChart.marker = markerView + + initSuccess = true + } + + val chartPointModel = ChartPointModel("", 0) + chartPointModel.dataTime = System.currentTimeMillis().timestampToCompleteDate() + chartPointModel.dataValue = model.methane + chartBeans.add(chartPointModel) + xAxisLabels.add(chartBeans.last().dataTime.dateToTime()) + + //浓度线 + strengthEntries.add( + Entry(i++.toFloat(), chartBeans.last().dataValue.toFloat(), "浓度") ) - if (dataModel != null) { - binding.sensorStateView.text = dataModel!!.methaneState - if (dataModel!!.methaneState == "正常") { - binding.sensorStateView.setTextColor(Color.GREEN) - } else { - binding.sensorStateView.setTextColor(Color.RED) - } - val degree = resources.getString(R.string.degree) - binding.horizontalDegreeView.text = - String.format("${dataModel!!.horizontal}$degree") - binding.verticalDegreeView.text = - String.format("${dataModel!!.vertical}$degree") - binding.gasConcentrationView.text = String.format("${dataModel!!.methane}ppm·m") + //设置数据 + val dataSet = LineDataSet(strengthEntries, "") + dataSet.setDrawCircles(false) + //线条颜色 + dataSet.color = Color.RED + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) - - if (dataModel!!.methane >= gasAlarmRule) { - isAlarm = "1" - -// recordVideo() - - captureImage(true) - } - - /***折线图**************************************************************************/ - if (!initSuccess) { - binding.methaneLineChart.init() - //添加自定义Marker - val markerView = LineChartMarkerView(context) - markerView.chartView = binding.methaneLineChart - markerView.setXAxisDate(xAxisLabels) - binding.methaneLineChart.marker = markerView - - initSuccess = true - } - - val chartPointModel = ChartPointModel("", 0) - chartPointModel.dataTime = System.currentTimeMillis().timestampToCompleteDate() - chartPointModel.dataValue = dataModel!!.methane - chartBeans.add(chartPointModel) - xAxisLabels.add(chartBeans.last().dataTime.dateToTime()) - - //浓度线 - strengthEntries.add( - Entry(i++.toFloat(), chartBeans.last().dataValue.toFloat(), "浓度") - ) - - //设置数据 - val dataSet = LineDataSet(strengthEntries, "") - dataSet.setDrawCircles(false) - //线条颜色 - dataSet.color = Color.RED - dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(dataSet) - val lineData = LineData(lineDataSets) - lineData.setDrawValues(false) - - //解决折线点太多导致卡顿问题 - if (lineData.entryCount > 100) { - lineData.removeDataSet(0) - lineData.notifyDataChanged() - } - binding.methaneLineChart.data = lineData - binding.methaneLineChart.invalidate() + //解决折线点太多导致卡顿问题 + if (lineData.entryCount > 100) { + lineData.removeDataSet(0) + lineData.notifyDataChanged() } + binding.methaneLineChart.data = lineData + binding.methaneLineChart.invalidate() + + //赋值上传参数对象缓存 + dataModel = model } - }, LocaleConstant.ACTION_UPDATE_DATA) + } + return true } private fun setMapConfig(savedInstanceState: Bundle?) {