diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 42dc662..e896199 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,9 +66,6 @@ - - uploadEvent() 4 -> completionMarker() 5 -> showRtkConfigDialog() - 6 -> navigatePageTo() + 6 -> SatelliteStatusDialog(context).show() } } }) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 42dc662..e896199 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,9 +66,6 @@ - uploadEvent() 4 -> completionMarker() 5 -> showRtkConfigDialog() - 6 -> navigatePageTo() + 6 -> SatelliteStatusDialog(context).show() } } }) diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt deleted file mode 100644 index 4703b1d..0000000 --- a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt +++ /dev/null @@ -1,153 +0,0 @@ -package com.casic.common.detector.gd.view - -import android.Manifest -import android.content.pm.PackageManager -import android.graphics.Color -import android.location.GnssStatus -import android.location.Location -import android.location.LocationListener -import android.location.LocationManager -import android.os.Bundle -import android.util.Log -import androidx.core.app.ActivityCompat -import com.amap.api.location.AMapLocation -import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter -import com.casic.common.detector.gd.callback.OnGetLocationListener -import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding -import com.casic.common.detector.gd.extensions.toDegree -import com.casic.common.detector.gd.model.Satellite -import com.casic.common.detector.gd.utils.LocationKit -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.divider.RecyclerViewItemDivider -import com.pengxh.kt.lite.extensions.getScreenHeight -import com.pengxh.kt.lite.extensions.getScreenWidth -import com.pengxh.kt.lite.extensions.getSystemService -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.widget.TitleBarView -import kotlin.math.roundToInt - -class SatelliteStatusActivity : KotlinBaseActivity(), - LocationListener { - - private val kTag = "SatelliteActivity" - private val context = this - private val locationManager by lazy { getSystemService()!! } - private val satelliteTypeMap = mapOf( - 0 to "UNKNOWN", - 1 to "GPS", - 3 to "GLONASS", - 4 to "QZSS", - 5 to "BDS", - 6 to "GALILEO", - 7 to "IRNSS", - ) - private val satelliteCollection = ArrayList() - private lateinit var satelliteAdapter: SatelliteRecyclerAdapter - private val locationKit by lazy { LocationKit(this) } - - override fun initOnCreate(savedInstanceState: Bundle?) { - val params = window.attributes - params.width = (getScreenWidth() * 0.97).roundToInt() - params.height = (getScreenHeight() * 0.75).roundToInt() - window.attributes = params - - if (ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_FINE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_COARSE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - ) { - "缺少定位权限".show(this) - return - } - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, 3000, 0f, this - ) - locationManager.registerGnssStatusCallback(gnssStatusListener, null) - satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection) - binding.recyclerView.adapter = satelliteAdapter - binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) - - //高德定位 - locationKit.getCurrentLocation(false, object : OnGetLocationListener { - override fun onSuccess(location: AMapLocation) { - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - override fun onError() { - "当前位置信号差,无法获取定位".show(context) - } - }) - } - - override fun onLocationChanged(location: Location) { - //转为度分秒 - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - private val gnssStatusListener = object : GnssStatus.Callback() { - override fun onSatelliteStatusChanged(status: GnssStatus) { - satelliteCollection.clear() - for (i in 0 until status.satelliteCount) { - //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 - val constellationType = status.getConstellationType(i) - val satellite = Satellite().apply { - svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" - signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 - elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 - azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 - type = constellationType // 获取卫星的类型 - isUsedInFix = status.usedInFix(i) - } - if (satellite.signal != 0) { - satelliteCollection.add(satellite) - } - } - Log.d(kTag, satelliteCollection.toJson()) - satelliteAdapter.notifyDataSetChanged() - } - } - - override fun initViewBinding(): ActivitySatelliteStatusBinding { - return ActivitySatelliteStatusBinding.inflate(layoutInflater) - } - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { - override fun onLeftClick() { - - } - - override fun onRightClick() { - finish() - } - }) - } - - override fun initEvent() { - - } - - override fun onDestroy() { - super.onDestroy() - locationManager.unregisterGnssStatusCallback(gnssStatusListener) - locationManager.removeUpdates(this) - Log.d(kTag, "onDestroy: 停止卫星信号监听") - locationKit.stopLocation() - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 42dc662..e896199 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,9 +66,6 @@ - uploadEvent() 4 -> completionMarker() 5 -> showRtkConfigDialog() - 6 -> navigatePageTo() + 6 -> SatelliteStatusDialog(context).show() } } }) diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt deleted file mode 100644 index 4703b1d..0000000 --- a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt +++ /dev/null @@ -1,153 +0,0 @@ -package com.casic.common.detector.gd.view - -import android.Manifest -import android.content.pm.PackageManager -import android.graphics.Color -import android.location.GnssStatus -import android.location.Location -import android.location.LocationListener -import android.location.LocationManager -import android.os.Bundle -import android.util.Log -import androidx.core.app.ActivityCompat -import com.amap.api.location.AMapLocation -import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter -import com.casic.common.detector.gd.callback.OnGetLocationListener -import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding -import com.casic.common.detector.gd.extensions.toDegree -import com.casic.common.detector.gd.model.Satellite -import com.casic.common.detector.gd.utils.LocationKit -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.divider.RecyclerViewItemDivider -import com.pengxh.kt.lite.extensions.getScreenHeight -import com.pengxh.kt.lite.extensions.getScreenWidth -import com.pengxh.kt.lite.extensions.getSystemService -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.widget.TitleBarView -import kotlin.math.roundToInt - -class SatelliteStatusActivity : KotlinBaseActivity(), - LocationListener { - - private val kTag = "SatelliteActivity" - private val context = this - private val locationManager by lazy { getSystemService()!! } - private val satelliteTypeMap = mapOf( - 0 to "UNKNOWN", - 1 to "GPS", - 3 to "GLONASS", - 4 to "QZSS", - 5 to "BDS", - 6 to "GALILEO", - 7 to "IRNSS", - ) - private val satelliteCollection = ArrayList() - private lateinit var satelliteAdapter: SatelliteRecyclerAdapter - private val locationKit by lazy { LocationKit(this) } - - override fun initOnCreate(savedInstanceState: Bundle?) { - val params = window.attributes - params.width = (getScreenWidth() * 0.97).roundToInt() - params.height = (getScreenHeight() * 0.75).roundToInt() - window.attributes = params - - if (ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_FINE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_COARSE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - ) { - "缺少定位权限".show(this) - return - } - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, 3000, 0f, this - ) - locationManager.registerGnssStatusCallback(gnssStatusListener, null) - satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection) - binding.recyclerView.adapter = satelliteAdapter - binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) - - //高德定位 - locationKit.getCurrentLocation(false, object : OnGetLocationListener { - override fun onSuccess(location: AMapLocation) { - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - override fun onError() { - "当前位置信号差,无法获取定位".show(context) - } - }) - } - - override fun onLocationChanged(location: Location) { - //转为度分秒 - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - private val gnssStatusListener = object : GnssStatus.Callback() { - override fun onSatelliteStatusChanged(status: GnssStatus) { - satelliteCollection.clear() - for (i in 0 until status.satelliteCount) { - //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 - val constellationType = status.getConstellationType(i) - val satellite = Satellite().apply { - svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" - signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 - elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 - azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 - type = constellationType // 获取卫星的类型 - isUsedInFix = status.usedInFix(i) - } - if (satellite.signal != 0) { - satelliteCollection.add(satellite) - } - } - Log.d(kTag, satelliteCollection.toJson()) - satelliteAdapter.notifyDataSetChanged() - } - } - - override fun initViewBinding(): ActivitySatelliteStatusBinding { - return ActivitySatelliteStatusBinding.inflate(layoutInflater) - } - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { - override fun onLeftClick() { - - } - - override fun onRightClick() { - finish() - } - }) - } - - override fun initEvent() { - - } - - override fun onDestroy() { - super.onDestroy() - locationManager.unregisterGnssStatusCallback(gnssStatusListener) - locationManager.removeUpdates(this) - Log.d(kTag, "onDestroy: 停止卫星信号监听") - locationKit.stopLocation() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt b/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt new file mode 100644 index 0000000..e25694f --- /dev/null +++ b/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt @@ -0,0 +1,141 @@ +package com.casic.common.detector.gd.widgets + +import android.Manifest +import android.app.Dialog +import android.content.Context +import android.content.pm.PackageManager +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.location.GnssStatus +import android.location.Location +import android.location.LocationListener +import android.location.LocationManager +import android.os.Bundle +import android.util.Log +import androidx.core.app.ActivityCompat +import com.amap.api.location.AMapLocation +import com.casic.common.detector.gd.R +import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter +import com.casic.common.detector.gd.callback.OnGetLocationListener +import com.casic.common.detector.gd.databinding.DialogSatelliteStatusBinding +import com.casic.common.detector.gd.extensions.toDegree +import com.casic.common.detector.gd.model.Satellite +import com.casic.common.detector.gd.utils.LocationKit +import com.pengxh.kt.lite.divider.RecyclerViewItemDivider +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getSystemService +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.TitleBarView +import kotlin.math.roundToInt + +class SatelliteStatusDialog(private val context: Context) : + Dialog(context, R.style.UserDefinedDialogStyle), LocationListener { + + private val kTag = "SatelliteStatusDialog" + private val locationManager by lazy { context.getSystemService()!! } + private val locationKit by lazy { LocationKit(context) } + private val satelliteTypeMap = mapOf( + 0 to "UNKNOWN", + 1 to "GPS", + 3 to "GLONASS", + 4 to "QZSS", + 5 to "BDS", + 6 to "GALILEO", + 7 to "IRNSS", + ) + private val satelliteCollection = ArrayList() + private val binding: DialogSatelliteStatusBinding by binding() + private lateinit var satelliteAdapter: SatelliteRecyclerAdapter + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + val params = window.attributes + params.width = (context.getScreenWidth() * 0.97).roundToInt() + params.height = (context.getScreenHeight() * 0.80).roundToInt() + window.attributes = params + + 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 + } + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, 3000, 0f, this + ) + locationManager.registerGnssStatusCallback(gnssStatusListener, null) + satelliteAdapter = SatelliteRecyclerAdapter(context, satelliteCollection) + binding.recyclerView.adapter = satelliteAdapter + binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) + + //高德定位 + locationKit.getCurrentLocation(false, object : OnGetLocationListener { + override fun onSuccess(location: AMapLocation) { + val lng = location.longitude.toDegree() + val lat = location.latitude.toDegree() + + binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" + } + + override fun onError() { + "当前位置信号差,无法获取定位".show(context) + } + }) + + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + + } + + override fun onRightClick() { + locationManager.unregisterGnssStatusCallback(gnssStatusListener) + locationManager.removeUpdates(this@SatelliteStatusDialog) + Log.d(kTag, "onRightClick: 停止卫星信号监听") + locationKit.stopLocation() + dismiss() + } + }) + } + + override fun onLocationChanged(location: Location) { + //转为度分秒 + val lng = location.longitude.toDegree() + val lat = location.latitude.toDegree() + + binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" + } + + private val gnssStatusListener = object : GnssStatus.Callback() { + override fun onSatelliteStatusChanged(status: GnssStatus) { + satelliteCollection.clear() + for (i in 0 until status.satelliteCount) { + //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 + val constellationType = status.getConstellationType(i) + val satellite = Satellite().apply { + svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" + signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 + elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 + azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 + type = constellationType // 获取卫星的类型 + isUsedInFix = status.usedInFix(i) + } + if (satellite.signal != 0) { + satelliteCollection.add(satellite) + } + } + satelliteAdapter.notifyDataSetChanged() + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 42dc662..e896199 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,9 +66,6 @@ - uploadEvent() 4 -> completionMarker() 5 -> showRtkConfigDialog() - 6 -> navigatePageTo() + 6 -> SatelliteStatusDialog(context).show() } } }) diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt deleted file mode 100644 index 4703b1d..0000000 --- a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt +++ /dev/null @@ -1,153 +0,0 @@ -package com.casic.common.detector.gd.view - -import android.Manifest -import android.content.pm.PackageManager -import android.graphics.Color -import android.location.GnssStatus -import android.location.Location -import android.location.LocationListener -import android.location.LocationManager -import android.os.Bundle -import android.util.Log -import androidx.core.app.ActivityCompat -import com.amap.api.location.AMapLocation -import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter -import com.casic.common.detector.gd.callback.OnGetLocationListener -import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding -import com.casic.common.detector.gd.extensions.toDegree -import com.casic.common.detector.gd.model.Satellite -import com.casic.common.detector.gd.utils.LocationKit -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.divider.RecyclerViewItemDivider -import com.pengxh.kt.lite.extensions.getScreenHeight -import com.pengxh.kt.lite.extensions.getScreenWidth -import com.pengxh.kt.lite.extensions.getSystemService -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.widget.TitleBarView -import kotlin.math.roundToInt - -class SatelliteStatusActivity : KotlinBaseActivity(), - LocationListener { - - private val kTag = "SatelliteActivity" - private val context = this - private val locationManager by lazy { getSystemService()!! } - private val satelliteTypeMap = mapOf( - 0 to "UNKNOWN", - 1 to "GPS", - 3 to "GLONASS", - 4 to "QZSS", - 5 to "BDS", - 6 to "GALILEO", - 7 to "IRNSS", - ) - private val satelliteCollection = ArrayList() - private lateinit var satelliteAdapter: SatelliteRecyclerAdapter - private val locationKit by lazy { LocationKit(this) } - - override fun initOnCreate(savedInstanceState: Bundle?) { - val params = window.attributes - params.width = (getScreenWidth() * 0.97).roundToInt() - params.height = (getScreenHeight() * 0.75).roundToInt() - window.attributes = params - - if (ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_FINE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_COARSE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - ) { - "缺少定位权限".show(this) - return - } - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, 3000, 0f, this - ) - locationManager.registerGnssStatusCallback(gnssStatusListener, null) - satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection) - binding.recyclerView.adapter = satelliteAdapter - binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) - - //高德定位 - locationKit.getCurrentLocation(false, object : OnGetLocationListener { - override fun onSuccess(location: AMapLocation) { - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - override fun onError() { - "当前位置信号差,无法获取定位".show(context) - } - }) - } - - override fun onLocationChanged(location: Location) { - //转为度分秒 - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - private val gnssStatusListener = object : GnssStatus.Callback() { - override fun onSatelliteStatusChanged(status: GnssStatus) { - satelliteCollection.clear() - for (i in 0 until status.satelliteCount) { - //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 - val constellationType = status.getConstellationType(i) - val satellite = Satellite().apply { - svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" - signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 - elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 - azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 - type = constellationType // 获取卫星的类型 - isUsedInFix = status.usedInFix(i) - } - if (satellite.signal != 0) { - satelliteCollection.add(satellite) - } - } - Log.d(kTag, satelliteCollection.toJson()) - satelliteAdapter.notifyDataSetChanged() - } - } - - override fun initViewBinding(): ActivitySatelliteStatusBinding { - return ActivitySatelliteStatusBinding.inflate(layoutInflater) - } - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { - override fun onLeftClick() { - - } - - override fun onRightClick() { - finish() - } - }) - } - - override fun initEvent() { - - } - - override fun onDestroy() { - super.onDestroy() - locationManager.unregisterGnssStatusCallback(gnssStatusListener) - locationManager.removeUpdates(this) - Log.d(kTag, "onDestroy: 停止卫星信号监听") - locationKit.stopLocation() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt b/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt new file mode 100644 index 0000000..e25694f --- /dev/null +++ b/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt @@ -0,0 +1,141 @@ +package com.casic.common.detector.gd.widgets + +import android.Manifest +import android.app.Dialog +import android.content.Context +import android.content.pm.PackageManager +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.location.GnssStatus +import android.location.Location +import android.location.LocationListener +import android.location.LocationManager +import android.os.Bundle +import android.util.Log +import androidx.core.app.ActivityCompat +import com.amap.api.location.AMapLocation +import com.casic.common.detector.gd.R +import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter +import com.casic.common.detector.gd.callback.OnGetLocationListener +import com.casic.common.detector.gd.databinding.DialogSatelliteStatusBinding +import com.casic.common.detector.gd.extensions.toDegree +import com.casic.common.detector.gd.model.Satellite +import com.casic.common.detector.gd.utils.LocationKit +import com.pengxh.kt.lite.divider.RecyclerViewItemDivider +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getSystemService +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.TitleBarView +import kotlin.math.roundToInt + +class SatelliteStatusDialog(private val context: Context) : + Dialog(context, R.style.UserDefinedDialogStyle), LocationListener { + + private val kTag = "SatelliteStatusDialog" + private val locationManager by lazy { context.getSystemService()!! } + private val locationKit by lazy { LocationKit(context) } + private val satelliteTypeMap = mapOf( + 0 to "UNKNOWN", + 1 to "GPS", + 3 to "GLONASS", + 4 to "QZSS", + 5 to "BDS", + 6 to "GALILEO", + 7 to "IRNSS", + ) + private val satelliteCollection = ArrayList() + private val binding: DialogSatelliteStatusBinding by binding() + private lateinit var satelliteAdapter: SatelliteRecyclerAdapter + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + val params = window.attributes + params.width = (context.getScreenWidth() * 0.97).roundToInt() + params.height = (context.getScreenHeight() * 0.80).roundToInt() + window.attributes = params + + 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 + } + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, 3000, 0f, this + ) + locationManager.registerGnssStatusCallback(gnssStatusListener, null) + satelliteAdapter = SatelliteRecyclerAdapter(context, satelliteCollection) + binding.recyclerView.adapter = satelliteAdapter + binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) + + //高德定位 + locationKit.getCurrentLocation(false, object : OnGetLocationListener { + override fun onSuccess(location: AMapLocation) { + val lng = location.longitude.toDegree() + val lat = location.latitude.toDegree() + + binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" + } + + override fun onError() { + "当前位置信号差,无法获取定位".show(context) + } + }) + + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + + } + + override fun onRightClick() { + locationManager.unregisterGnssStatusCallback(gnssStatusListener) + locationManager.removeUpdates(this@SatelliteStatusDialog) + Log.d(kTag, "onRightClick: 停止卫星信号监听") + locationKit.stopLocation() + dismiss() + } + }) + } + + override fun onLocationChanged(location: Location) { + //转为度分秒 + val lng = location.longitude.toDegree() + val lat = location.latitude.toDegree() + + binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" + } + + private val gnssStatusListener = object : GnssStatus.Callback() { + override fun onSatelliteStatusChanged(status: GnssStatus) { + satelliteCollection.clear() + for (i in 0 until status.satelliteCount) { + //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 + val constellationType = status.getConstellationType(i) + val satellite = Satellite().apply { + svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" + signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 + elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 + azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 + type = constellationType // 获取卫星的类型 + isUsedInFix = status.usedInFix(i) + } + if (satellite.signal != 0) { + satelliteCollection.add(satellite) + } + } + satelliteAdapter.notifyDataSetChanged() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml deleted file mode 100644 index 6b98b2e..0000000 --- a/app/src/main/res/layout/activity_satellite_status.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 42dc662..e896199 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,9 +66,6 @@ - uploadEvent() 4 -> completionMarker() 5 -> showRtkConfigDialog() - 6 -> navigatePageTo() + 6 -> SatelliteStatusDialog(context).show() } } }) diff --git a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt b/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt deleted file mode 100644 index 4703b1d..0000000 --- a/app/src/main/java/com/casic/common/detector/gd/view/SatelliteStatusActivity.kt +++ /dev/null @@ -1,153 +0,0 @@ -package com.casic.common.detector.gd.view - -import android.Manifest -import android.content.pm.PackageManager -import android.graphics.Color -import android.location.GnssStatus -import android.location.Location -import android.location.LocationListener -import android.location.LocationManager -import android.os.Bundle -import android.util.Log -import androidx.core.app.ActivityCompat -import com.amap.api.location.AMapLocation -import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter -import com.casic.common.detector.gd.callback.OnGetLocationListener -import com.casic.common.detector.gd.databinding.ActivitySatelliteStatusBinding -import com.casic.common.detector.gd.extensions.toDegree -import com.casic.common.detector.gd.model.Satellite -import com.casic.common.detector.gd.utils.LocationKit -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.divider.RecyclerViewItemDivider -import com.pengxh.kt.lite.extensions.getScreenHeight -import com.pengxh.kt.lite.extensions.getScreenWidth -import com.pengxh.kt.lite.extensions.getSystemService -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson -import com.pengxh.kt.lite.widget.TitleBarView -import kotlin.math.roundToInt - -class SatelliteStatusActivity : KotlinBaseActivity(), - LocationListener { - - private val kTag = "SatelliteActivity" - private val context = this - private val locationManager by lazy { getSystemService()!! } - private val satelliteTypeMap = mapOf( - 0 to "UNKNOWN", - 1 to "GPS", - 3 to "GLONASS", - 4 to "QZSS", - 5 to "BDS", - 6 to "GALILEO", - 7 to "IRNSS", - ) - private val satelliteCollection = ArrayList() - private lateinit var satelliteAdapter: SatelliteRecyclerAdapter - private val locationKit by lazy { LocationKit(this) } - - override fun initOnCreate(savedInstanceState: Bundle?) { - val params = window.attributes - params.width = (getScreenWidth() * 0.97).roundToInt() - params.height = (getScreenHeight() * 0.75).roundToInt() - window.attributes = params - - if (ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_FINE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - this, Manifest.permission.ACCESS_COARSE_LOCATION - ) != PackageManager.PERMISSION_GRANTED - ) { - "缺少定位权限".show(this) - return - } - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, 3000, 0f, this - ) - locationManager.registerGnssStatusCallback(gnssStatusListener, null) - satelliteAdapter = SatelliteRecyclerAdapter(this, satelliteCollection) - binding.recyclerView.adapter = satelliteAdapter - binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) - - //高德定位 - locationKit.getCurrentLocation(false, object : OnGetLocationListener { - override fun onSuccess(location: AMapLocation) { - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - override fun onError() { - "当前位置信号差,无法获取定位".show(context) - } - }) - } - - override fun onLocationChanged(location: Location) { - //转为度分秒 - val lng = location.longitude.toDegree() - val lat = location.latitude.toDegree() - - binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" - } - - private val gnssStatusListener = object : GnssStatus.Callback() { - override fun onSatelliteStatusChanged(status: GnssStatus) { - satelliteCollection.clear() - for (i in 0 until status.satelliteCount) { - //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 - val constellationType = status.getConstellationType(i) - val satellite = Satellite().apply { - svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" - signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 - elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 - azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 - type = constellationType // 获取卫星的类型 - isUsedInFix = status.usedInFix(i) - } - if (satellite.signal != 0) { - satelliteCollection.add(satellite) - } - } - Log.d(kTag, satelliteCollection.toJson()) - satelliteAdapter.notifyDataSetChanged() - } - } - - override fun initViewBinding(): ActivitySatelliteStatusBinding { - return ActivitySatelliteStatusBinding.inflate(layoutInflater) - } - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { - override fun onLeftClick() { - - } - - override fun onRightClick() { - finish() - } - }) - } - - override fun initEvent() { - - } - - override fun onDestroy() { - super.onDestroy() - locationManager.unregisterGnssStatusCallback(gnssStatusListener) - locationManager.removeUpdates(this) - Log.d(kTag, "onDestroy: 停止卫星信号监听") - locationKit.stopLocation() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt b/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt new file mode 100644 index 0000000..e25694f --- /dev/null +++ b/app/src/main/java/com/casic/common/detector/gd/widgets/SatelliteStatusDialog.kt @@ -0,0 +1,141 @@ +package com.casic.common.detector.gd.widgets + +import android.Manifest +import android.app.Dialog +import android.content.Context +import android.content.pm.PackageManager +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.location.GnssStatus +import android.location.Location +import android.location.LocationListener +import android.location.LocationManager +import android.os.Bundle +import android.util.Log +import androidx.core.app.ActivityCompat +import com.amap.api.location.AMapLocation +import com.casic.common.detector.gd.R +import com.casic.common.detector.gd.adapter.SatelliteRecyclerAdapter +import com.casic.common.detector.gd.callback.OnGetLocationListener +import com.casic.common.detector.gd.databinding.DialogSatelliteStatusBinding +import com.casic.common.detector.gd.extensions.toDegree +import com.casic.common.detector.gd.model.Satellite +import com.casic.common.detector.gd.utils.LocationKit +import com.pengxh.kt.lite.divider.RecyclerViewItemDivider +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getSystemService +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.widget.TitleBarView +import kotlin.math.roundToInt + +class SatelliteStatusDialog(private val context: Context) : + Dialog(context, R.style.UserDefinedDialogStyle), LocationListener { + + private val kTag = "SatelliteStatusDialog" + private val locationManager by lazy { context.getSystemService()!! } + private val locationKit by lazy { LocationKit(context) } + private val satelliteTypeMap = mapOf( + 0 to "UNKNOWN", + 1 to "GPS", + 3 to "GLONASS", + 4 to "QZSS", + 5 to "BDS", + 6 to "GALILEO", + 7 to "IRNSS", + ) + private val satelliteCollection = ArrayList() + private val binding: DialogSatelliteStatusBinding by binding() + private lateinit var satelliteAdapter: SatelliteRecyclerAdapter + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + val params = window.attributes + params.width = (context.getScreenWidth() * 0.97).roundToInt() + params.height = (context.getScreenHeight() * 0.80).roundToInt() + window.attributes = params + + 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 + } + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, 3000, 0f, this + ) + locationManager.registerGnssStatusCallback(gnssStatusListener, null) + satelliteAdapter = SatelliteRecyclerAdapter(context, satelliteCollection) + binding.recyclerView.adapter = satelliteAdapter + binding.recyclerView.addItemDecoration(RecyclerViewItemDivider(0f, 0f, Color.WHITE)) + + //高德定位 + locationKit.getCurrentLocation(false, object : OnGetLocationListener { + override fun onSuccess(location: AMapLocation) { + val lng = location.longitude.toDegree() + val lat = location.latitude.toDegree() + + binding.gdGpsView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" + } + + override fun onError() { + "当前位置信号差,无法获取定位".show(context) + } + }) + + binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { + override fun onLeftClick() { + + } + + override fun onRightClick() { + locationManager.unregisterGnssStatusCallback(gnssStatusListener) + locationManager.removeUpdates(this@SatelliteStatusDialog) + Log.d(kTag, "onRightClick: 停止卫星信号监听") + locationKit.stopLocation() + dismiss() + } + }) + } + + override fun onLocationChanged(location: Location) { + //转为度分秒 + val lng = location.longitude.toDegree() + val lat = location.latitude.toDegree() + + binding.locationView.text = "经度:${lng} 纬度:${lat}\n精度:${location.accuracy}m" + } + + private val gnssStatusListener = object : GnssStatus.Callback() { + override fun onSatelliteStatusChanged(status: GnssStatus) { + satelliteCollection.clear() + for (i in 0 until status.satelliteCount) { + //在同一个导航系统内,svid是唯一的,不会重复,但是,不同的导航系统可能会使用相同的svid数值 + val constellationType = status.getConstellationType(i) + val satellite = Satellite().apply { + svid = "${satelliteTypeMap[constellationType]}_${status.getSvid(i)}" + signal = status.getCn0DbHz(i).toInt() //获取卫星的信号 + elevation = status.getElevationDegrees(i).toInt()// 获取卫星的仰角 + azimuth = status.getAzimuthDegrees(i).toInt()// 获取卫星的方位角 + type = constellationType // 获取卫星的类型 + isUsedInFix = status.usedInFix(i) + } + if (satellite.signal != 0) { + satelliteCollection.add(satellite) + } + } + satelliteAdapter.notifyDataSetChanged() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_satellite_status.xml b/app/src/main/res/layout/activity_satellite_status.xml deleted file mode 100644 index 6b98b2e..0000000 --- a/app/src/main/res/layout/activity_satellite_status.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_satellite_status.xml b/app/src/main/res/layout/dialog_satellite_status.xml new file mode 100644 index 0000000..7d571bd --- /dev/null +++ b/app/src/main/res/layout/dialog_satellite_status.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file