android - 如何查看 GPS 接收器的当前状态?

标签 android gps

如何查看 GPS 接收器的当前状态?我已经检查了 LocationListener onStatusChanged方法,但不知何故,它似​​乎不起作用,或者只是错误的可能性。

基本上我只需要知道屏幕顶部的 GPS 图标是闪烁(没有实际修复)还是稳定(修复可用)。

最佳答案

作为 SpeedView:Android 版 GPS 车速表的开发者,我一定尝试了所有可能的解决方案来解决这个问题,但结果都是一样的。让我们重申一下什么是行不通的:

  1. onStatusChanged() 不会在 Eclair 和 Froyo 上被调用。
  2. 当然,只计算所有可用卫星是没有用的。
  3. 检查 usedInFix() 是否有任何卫星返回 true 也不是很有帮助。系统显然失去了修复,但不断报告其中仍有几个 sats 正在使用中。

这是我找到的唯一可行的解​​决方案,也是我在应用程序中实际使用的解决方案。假设我们有一个实现 GpsStatus.Listener 的简单类:

private class MyGPSListener implements GpsStatus.Listener {
    public void onGpsStatusChanged(int event) {
        switch (event) {
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                if (mLastLocation != null)
                    isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < 3000;

                if (isGPSFix) { // A fix has been acquired.
                    // Do something.
                } else { // The fix has been lost.
                    // Do something.
                }

                break;
            case GpsStatus.GPS_EVENT_FIRST_FIX:
                // Do something.
                isGPSFix = true;

                break;
        }
    }
}

好的,现在在 onLocationChanged() 我们添加以下内容:

@Override
public void onLocationChanged(Location location) {
    if (location == null) return;

    mLastLocationMillis = SystemClock.elapsedRealtime();

    // Do something.

    mLastLocation = location;
}

就是这样。基本上,这就是完成所有工作的那一行:

isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < 3000;

您当然可以调整毫秒值,但我建议将其设置为 3-5 秒左右。

这确实有效,虽然我没有查看绘制原生 GPS 图标的源代码,但这接近于复制它的行为。希望这对某人有所帮助。

关于android - 如何查看 GPS 接收器的当前状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021176/

相关文章:

android - 如何在 scrollview 中动态添加可滚动的水平 Linearlayout

java - 用于创建显示我的 GPS 点的 map 图像的免费 map

android - 我的手机没有动,但 GPS 数据仍在变化

android - Cordova 地理定位插件无法从适用于 Android 的 GPS 获取位置

java - 如何用颜色填充自由绘制的形状

Android Eclipse、Dropbox、Windows 和 Linux

android - 调整图像大小以适合 WebView 尺寸

java - AlertDialog 和软键盘

android - 从 DialogFragment 管理 Activity

java - 如何将 GPS 点从 DDD MM.MMM(字符串)转换为十进制(纬度和经度)?