diff --git a/app/build.gradle b/app/build.gradle index d716118..5cd4bd7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ applicationId "com.casic.detector.common" minSdkVersion 23 targetSdkVersion 33 - versionCode 5090 - versionName "5.0.9" + versionCode 5091 + versionName "5.0.9.1" } buildTypes { @@ -112,4 +112,6 @@ implementation 'io.github.lucksiege:pictureselector:v3.11.1' //图片压缩 implementation 'top.zibin:Luban:1.1.8' + //TCP + implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d716118..5cd4bd7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ applicationId "com.casic.detector.common" minSdkVersion 23 targetSdkVersion 33 - versionCode 5090 - versionName "5.0.9" + versionCode 5091 + versionName "5.0.9.1" } buildTypes { @@ -112,4 +112,6 @@ implementation 'io.github.lucksiege:pictureselector:v3.11.1' //图片压缩 implementation 'top.zibin:Luban:1.1.8' + //TCP + implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt b/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt index 2a873ca..3721e42 100644 --- a/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt @@ -28,6 +28,7 @@ const val SERVER_IP = "SERVER_IP" const val SERVER_PORT = "SERVER_PORT" const val APP_AUTHORITY = "com.casic.detector.fileprovider" + const val QX_RTK_HOST = "rtk.ntrip.qxwz.com" const val ACK = "Application_Access_Key" const val ACS = "Application_Access_Secret" const val RTK_SERVER = "RTK_SERVER" diff --git a/app/build.gradle b/app/build.gradle index d716118..5cd4bd7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ applicationId "com.casic.detector.common" minSdkVersion 23 targetSdkVersion 33 - versionCode 5090 - versionName "5.0.9" + versionCode 5091 + versionName "5.0.9.1" } buildTypes { @@ -112,4 +112,6 @@ implementation 'io.github.lucksiege:pictureselector:v3.11.1' //图片压缩 implementation 'top.zibin:Luban:1.1.8' + //TCP + implementation 'io.netty:netty-all:4.1.23.Final' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt b/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt index 2a873ca..3721e42 100644 --- a/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/detector/common/utils/LocaleConstant.kt @@ -28,6 +28,7 @@ const val SERVER_IP = "SERVER_IP" const val SERVER_PORT = "SERVER_PORT" const val APP_AUTHORITY = "com.casic.detector.fileprovider" + const val QX_RTK_HOST = "rtk.ntrip.qxwz.com" const val ACK = "Application_Access_Key" const val ACS = "Application_Access_Secret" const val RTK_SERVER = "RTK_SERVER" diff --git a/app/src/main/java/com/casic/detector/common/view/MainActivity.kt b/app/src/main/java/com/casic/detector/common/view/MainActivity.kt index c5403fe..99c4e63 100644 --- a/app/src/main/java/com/casic/detector/common/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/common/view/MainActivity.kt @@ -50,6 +50,7 @@ import com.casic.detector.common.databinding.DialogSearchMarkerNewBinding import com.casic.detector.common.extensions.appendDownloadUrl import com.casic.detector.common.extensions.compressImage +import com.casic.detector.common.extensions.convertToGPGGA import com.casic.detector.common.extensions.createTaskCode import com.casic.detector.common.extensions.drawCircle import com.casic.detector.common.extensions.getDefaultValue @@ -69,7 +70,11 @@ import com.casic.detector.common.utils.GpioManager import com.casic.detector.common.utils.LocaleConstant import com.casic.detector.common.utils.LocationTool +import com.casic.detector.common.utils.RTKLocationTool import com.casic.detector.common.utils.RouteOnMap +import com.casic.detector.common.utils.tcp.ConnectState +import com.casic.detector.common.utils.tcp.OnSocketConnectListener +import com.casic.detector.common.utils.tcp.SocketClient import com.casic.detector.common.vm.TaskViewModel import com.casic.detector.common.widgets.MarkerDetailDialog import com.casic.detector.common.widgets.QueryMarkerDialog @@ -103,11 +108,13 @@ import com.pengxh.kt.lite.widget.dialog.AlertInputDialog import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import io.netty.buffer.Unpooled import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File import java.math.RoundingMode +import java.nio.charset.StandardCharsets import java.text.DecimalFormat import java.util.Calendar import java.util.Date @@ -117,7 +124,7 @@ class MainActivity : SerialPortActivity(), SensorEventListener, - Handler.Callback { + OnSocketConnectListener, Handler.Callback { private val kTag = "MainActivity" private val context = this @@ -144,9 +151,11 @@ private var freeTaskId: String? = null private var gravity: FloatArray? = null private var geomagnetic: FloatArray? = null + private var connectState = ConnectState.CLOSED private lateinit var aMap: AMap private lateinit var sensorManager: SensorManager private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var socketClient: SocketClient /***inner class 需要用到*****start*/ private val gpioManager by lazy { GpioManager() } @@ -177,7 +186,14 @@ //保留小数2位 decimalFormat.roundingMode = RoundingMode.HALF_UP - "登录成功".show(this) + RTKLocationTool.getCurrentLocation(this) { + if (connectState == ConnectState.SUCCESS) { + //连接成功就发送千寻请求报文 + val gga = it.convertToGPGGA() + Log.d(kTag, gga) + socketClient.sendData(gga) + } + } //地图初始化 initMapConfig(savedInstanceState) @@ -306,10 +322,7 @@ 2 -> navigatePageTo() 3 -> uploadEvent() 4 -> completionMarker() - 5 -> { - "尽情期待".show(context) -// navigatePageTo() - } + 5 -> navigatePageTo() } } }) @@ -992,6 +1005,52 @@ //注册磁场传感器监听 val magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) sensorManager.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) + + //连接千寻RTK服务器 + lifecycleScope.launch(Dispatchers.IO) { + socketClient = SocketClient.Builder() + .setHostname("203.107.45.154") + .setPort(8003) + .setTimeout(5000) + .setOnSocketListener(this@MainActivity) + .build() + socketClient.connect() + } + } + + override fun onMessageResponse(data: ByteArray) { + if (data.size == 14) { + /** + * 连接成功,登录会返回 ICY 200 OK + *

+ * 0d0a0d0a -> \r\n\r\n + * */ + val s = String(data, StandardCharsets.UTF_8) + if (s.contains("ICY 200 OK")) { + "高精度定位服务器连接成功".show(this) + } + } else { + Log.d(kTag, data.contentToString()) + } + } + + override fun onServiceConnectStatusChanged(status: ConnectState) { + this.connectState = status + if (connectState == ConnectState.SUCCESS) { + //连接成功就发送千寻请求报文 + var msg = "GET /RTCM32_GGB HTTP/1.1\r\n" + msg += "Host: ${LocaleConstant.QX_RTK_HOST}\r\n" + msg += "Ntrip-Version: Ntrip/2.0\r\n" + msg += "User-Agent: NTRIP GNSSInternetRadio 2.0.10 \r\n" + msg += "Accept: */*\r\nConnection: close\r\n" + msg += "Accept:*/* \r\n" + // base64加密用户名和密码 + val byteArray = "qxtmcr0087663:1f1f9b9".toByteArray() + val base64 = android.util.Base64.encodeToString(byteArray, android.util.Base64.DEFAULT) + msg += "Authorization: Basic $base64\r\n\r\n" + val byteBuf = Unpooled.wrappedBuffer(msg.toByteArray()) + socketClient.sendData(byteBuf) + } } override fun onPause() {