作为SpeedView的开发商:GPS速度计为Android,我必须已经尝试过每个可能的解决方案这个问题,所有与相同的负面的结果。让我们重申一些不起作用:

> onStatusChanged()没有被调用Eclair和Froyo。

>简单地计数所有可用的卫星当然是无用的。

>检查任何卫星是否为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;

}

}

}

OK,现在在onLocationChanged()我们添加以下:

@Override

public void onLocationChanged(Location location) {

if (location == null) return;

mLastLocationMillis = SystemClock.elapsedRealtime();

// Do something.

mLastLocation = location;

}

就是这样。基本上,这是做到这一点的线:

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

你可以调整millis的价值当然,但我建议设置它大约3-5秒。

这实际上是工作,虽然我没有看过绘制本机GPS图标的源代码,这接近复制其行为。希望这有助于某人。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐