首页 > 解决方案 > 在 Android App 中检查 GPS Provider 的状态

问题描述

我有一个可操作的 Android 应用程序,它在后台服务中报告用户位置。我想集成一个功能,它会在 GPS 信号丢失时通知用户。

我们目前开始位置更新的实施是:

    mLocationListener = LocationListener(LocationManager.GPS_PROVIDER, gpsDeviceCallback)
    if (handlerThread?.isAlive == true) {
        handlerThread?.quit()
    }
    handlerThread = HandlerThread("GpsLocationHandler")
    handlerThread!!.start()
    mLocationManager?.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE.toFloat(),
            mLocationListener, handlerThread!!.looper)

LOCATION_INTERVAL 设置为 1000 毫秒,LOCATION_DISTANCE 设置为 10m。

我们在正常操作下得到预期的 onLocationChanged 回调。但是,我希望就如何检测 GPS 丢失或手机无法获得足够 GPS 信号的情况提供建议。

我们已经实现了一个解决方案,我们运行一个时间任务并确定在计时器期间是否调用了 onLocationChanged。该解决方案的问题在于,如果用户手机在此期间是静止的,则不会发生 onLocationChanged 回调。因此,这种方法不能作为检测 GPS 信号不足的方法。

现在不推荐使用 onStatusChanged 作为 LocationListener 方法的用户,因此这也不是一个选项。

这个问题有一些标准的解决方案吗?当我们的检查计时器到期以测试当前 GPS 状态时,在没有发生 onLocationChanged 回调的情况下,也许可以调用一些方法?

谢谢!

标签: javaandroidkotlinlocation

解决方案


您可以检查当前连接的卫星并估算准确度,请参见:https://stackoverflow.com/a/10589949


推荐阅读