diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt index 176f05b..c9b1be8 100644 --- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt +++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt @@ -17,7 +17,7 @@ import com.casic.common.detector.gd.extensions.convertToGPGGA import com.casic.common.detector.gd.utils.LocaleConstant import com.casic.common.detector.gd.utils.NtripAuthorizationCreator -import com.casic.common.detector.gd.utils.RtkLocationTool +import com.casic.common.detector.gd.utils.RTK import com.casic.common.detector.gd.view.MainActivity import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues @@ -64,7 +64,7 @@ connectQianXunServer() - RtkLocationTool.getCurrentLocation(this) { + RTK.getCurrentLocation(this) { val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation val message = weakHandler.obtainMessage() message.what = 2024090301 diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt index 176f05b..c9b1be8 100644 --- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt +++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt @@ -17,7 +17,7 @@ import com.casic.common.detector.gd.extensions.convertToGPGGA import com.casic.common.detector.gd.utils.LocaleConstant import com.casic.common.detector.gd.utils.NtripAuthorizationCreator -import com.casic.common.detector.gd.utils.RtkLocationTool +import com.casic.common.detector.gd.utils.RTK import com.casic.common.detector.gd.view.MainActivity import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues @@ -64,7 +64,7 @@ connectQianXunServer() - RtkLocationTool.getCurrentLocation(this) { + RTK.getCurrentLocation(this) { val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation val message = weakHandler.obtainMessage() message.what = 2024090301 diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt new file mode 100644 index 0000000..556a4c1 --- /dev/null +++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt @@ -0,0 +1,68 @@ +package com.casic.common.detector.gd.utils + +import android.Manifest +import android.content.Context +import android.content.pm.PackageManager +import android.location.LocationListener +import android.location.LocationManager +import android.os.Handler +import android.os.Looper +import android.util.Log +import androidx.core.app.ActivityCompat +import androidx.core.location.GnssStatusCompat +import androidx.core.location.LocationManagerCompat +import com.pengxh.kt.lite.extensions.getSystemService +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.SaveKeyValues + +object RTK { + + private const val kTag = "RTK" + private val handler = Handler(Looper.getMainLooper()) + + fun getCurrentLocation(context: Context, rtkLocationListener: LocationListener) { + if (ActivityCompat.checkSelfPermission( + context, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS + ) != PackageManager.PERMISSION_GRANTED + && ActivityCompat.checkSelfPermission( + context, Manifest.permission.ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + && ActivityCompat.checkSelfPermission( + context, Manifest.permission.ACCESS_COARSE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + ) { + "缺少定位权限".show(context) + return + } + val locationManager = context.getSystemService() ?: return + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, 0, 0f + ) { + Log.d(kTag, "${it.longitude}, ${it.latitude}") + rtkLocationListener.onLocationChanged(it) + } + + LocationManagerCompat.registerGnssStatusCallback( + locationManager, object : GnssStatusCompat.Callback() { + override fun onSatelliteStatusChanged(status: GnssStatusCompat) { + super.onSatelliteStatusChanged(status) + // 可以搜索到的卫星总数 + val satelliteCount = status.satelliteCount + var effectiveCount = 0 + for (index in 0 until satelliteCount) { + /** + * 每个卫星的载波噪声密度,噪声密度越大,信号越强。 + *
+ * 参考:https://juejin.cn/post/7144313606329335815 + * */ + val cn0DbHz = status.getCn0DbHz(index) + if (cn0DbHz > 20) { + effectiveCount++ + } + } + SaveKeyValues.putValue(LocaleConstant.SATELLITE_EFFECTIVE_COUNT, effectiveCount) + } + }, handler + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt index 176f05b..c9b1be8 100644 --- a/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt +++ b/app/src/main/java/com/casic/common/detector/gd/service/NtripConnectService.kt @@ -17,7 +17,7 @@ import com.casic.common.detector.gd.extensions.convertToGPGGA import com.casic.common.detector.gd.utils.LocaleConstant import com.casic.common.detector.gd.utils.NtripAuthorizationCreator -import com.casic.common.detector.gd.utils.RtkLocationTool +import com.casic.common.detector.gd.utils.RTK import com.casic.common.detector.gd.view.MainActivity import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.SaveKeyValues @@ -64,7 +64,7 @@ connectQianXunServer() - RtkLocationTool.getCurrentLocation(this) { + RTK.getCurrentLocation(this) { val weakHandler = MainActivity.weakReferenceHandler ?: return@getCurrentLocation val message = weakHandler.obtainMessage() message.what = 2024090301 diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt new file mode 100644 index 0000000..556a4c1 --- /dev/null +++ b/app/src/main/java/com/casic/common/detector/gd/utils/RTK.kt @@ -0,0 +1,68 @@ +package com.casic.common.detector.gd.utils + +import android.Manifest +import android.content.Context +import android.content.pm.PackageManager +import android.location.LocationListener +import android.location.LocationManager +import android.os.Handler +import android.os.Looper +import android.util.Log +import androidx.core.app.ActivityCompat +import androidx.core.location.GnssStatusCompat +import androidx.core.location.LocationManagerCompat +import com.pengxh.kt.lite.extensions.getSystemService +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.SaveKeyValues + +object RTK { + + private const val kTag = "RTK" + private val handler = Handler(Looper.getMainLooper()) + + fun getCurrentLocation(context: Context, rtkLocationListener: LocationListener) { + if (ActivityCompat.checkSelfPermission( + context, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS + ) != PackageManager.PERMISSION_GRANTED + && ActivityCompat.checkSelfPermission( + context, Manifest.permission.ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + && ActivityCompat.checkSelfPermission( + context, Manifest.permission.ACCESS_COARSE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + ) { + "缺少定位权限".show(context) + return + } + val locationManager = context.getSystemService() ?: return + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, 0, 0f + ) { + Log.d(kTag, "${it.longitude}, ${it.latitude}") + rtkLocationListener.onLocationChanged(it) + } + + LocationManagerCompat.registerGnssStatusCallback( + locationManager, object : GnssStatusCompat.Callback() { + override fun onSatelliteStatusChanged(status: GnssStatusCompat) { + super.onSatelliteStatusChanged(status) + // 可以搜索到的卫星总数 + val satelliteCount = status.satelliteCount + var effectiveCount = 0 + for (index in 0 until satelliteCount) { + /** + * 每个卫星的载波噪声密度,噪声密度越大,信号越强。 + *
+ * 参考:https://juejin.cn/post/7144313606329335815 + * */ + val cn0DbHz = status.getCn0DbHz(index) + if (cn0DbHz > 20) { + effectiveCount++ + } + } + SaveKeyValues.putValue(LocaleConstant.SATELLITE_EFFECTIVE_COUNT, effectiveCount) + } + }, handler + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/common/detector/gd/utils/RtkLocationTool.kt b/app/src/main/java/com/casic/common/detector/gd/utils/RtkLocationTool.kt deleted file mode 100644 index 734dda0..0000000 --- a/app/src/main/java/com/casic/common/detector/gd/utils/RtkLocationTool.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.common.detector.gd.utils - -import android.Manifest -import android.content.Context -import android.content.pm.PackageManager -import android.location.LocationListener -import android.location.LocationManager -import android.os.Handler -import android.os.Looper -import androidx.core.app.ActivityCompat -import androidx.core.location.GnssStatusCompat -import androidx.core.location.LocationManagerCompat -import com.pengxh.kt.lite.extensions.getSystemService -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.SaveKeyValues - -object RtkLocationTool { - fun getCurrentLocation(context: Context, rtkLocationListener: LocationListener) { - if (ActivityCompat.checkSelfPermission( - context, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - context, Manifest.permission.ACCESS_FINE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - context, Manifest.permission.ACCESS_COARSE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - ) { - "缺少定位权限".show(context) - return - } - val locationManager = context.getSystemService() ?: return - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, 0, 0f - ) { - rtkLocationListener.onLocationChanged(it) - } - - LocationManagerCompat.registerGnssStatusCallback( - locationManager, object : GnssStatusCompat.Callback() { - override fun onSatelliteStatusChanged(status: GnssStatusCompat) { - super.onSatelliteStatusChanged(status) - // 可以搜索到的卫星总数 - val satelliteCount = status.satelliteCount - var effectiveCount = 0 - for (index in 0 until satelliteCount) { - /** - * 每个卫星的载波噪声密度,噪声密度越大,信号越强。 - *
- * 参考:https://juejin.cn/post/7144313606329335815 - * */ - val cn0DbHz = status.getCn0DbHz(index) - if (cn0DbHz > 20) { - effectiveCount++ - } - } - SaveKeyValues.putValue(LocaleConstant.SATELLITE_EFFECTIVE_COUNT, effectiveCount) - } - }, Handler(Looper.getMainLooper()) - ) - } -} \ No newline at end of file