弃用GpsStatus后的GPS修复

时间:2018-10-22 13:40:03

标签: android kotlin gps deprecated android-gps

GPS修复后,我正在尝试更改变量。但在API 24之后,不建议使用GpsStatus。因此,我为API <24和API => 24编写代码。

class MainActivity : FragmentActivity(), LocationListener {

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager

locationManager?.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1f, this)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            val GnssCallback: GnssStatus.Callback = object : GnssStatus.Callback() {
                override fun onFirstFix(ttffMillis: Int) : Unit {
                    super.onFirstFix(ttffMillis)
                    GPSon = true
                }

                override fun onStopped() {
                    super.onStopped()
                    GPSon = false
                }
            }
        }

    }

    @Suppress("DEPRECATION")
    override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {

        Log.d("GPS", "GPS on status changed")

        when (status) {
            GpsStatus.GPS_EVENT_STARTED -> {

            }
            GpsStatus.GPS_EVENT_STOPPED -> {
                GPSon = false
            }
            GpsStatus.GPS_EVENT_FIRST_FIX -> {
                Log.d("GPS", "GPS First Fix")
                GPSon = true
            }
            GpsStatus.GPS_EVENT_SATELLITE_STATUS -> {

            }
        }

    }
}

在onCreate中,我有API => 24的代码,其中我正在使用GnssStatusCallback。但是,即使我在API 28上运行此代码,它仍然会触发onStatusChanged()函数。第二个问题是函数onStatusChanged()触发并显示日志消息“ GPS的状态已更改”,但它从未进入交换机并触发第二个日志消息“ GPS First Fix”。这不适用于任何API。

如何解决此问题?不建议使用GpsStatus时如何获取GPS状态。

谢谢。

0 个答案:

没有答案