6

如果我将任何 ACCURACY 设置为标准,LocationManager 需要很长时间才能开始更新位置:

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
provider = locationManager.getBestProvider(criteria, true);
locationManager.requestLocationUpdates(provider, 0, 0, this);

如果我删除 ACCURACY 标志,它会立即启动,但有时不准确。

我怎样才能让它立即开始更新并具有良好的准确性?

4

4 回答 4

9

不幸的是,没办法。

如果您使用ACCURACY_FINE,您将仅使用 GPS,但 GPS 具有“冷启动”效果。这意味着如果您的设备长时间不使用 GPS,则需要大量时间连接卫星并下载年历和星历。您无法更改此行为。

如果您不使用ACCURACY_FINE,您将同时使用 GPS 和网络(移动、wi-fi)信号。所以你会很快收到来自网络的第一位置,因为它们没有“冷启动”的效果,但是这种方法的准确性很低。当您的 GPS 模块准备就绪时,您也将开始接收来自它的更新。

于 2013-06-22T09:23:00.573 回答
3

如果您只关心准确性而不关心方位或高度等问题,我建议您切换到LocationClient来自 Google 的 API中的新融合提供程序。

获得第一个修复非常快,比基于网络的更准确,并且不依赖于 GPS。

它需要比内置更多的设置LocationManager,因此您可以阅读这篇培训文章:http: //developer.android.com/training/location/receive-location-updates.html

于 2013-06-23T11:21:22.567 回答
2

我怀疑至少ACCURACY_FINE,它正在等待获得初始 GPS 定位。您可能会发现,如果您因为其他原因(例如,如果您在导航中)已经打开 GPS,它会立即开始报告。

获得 GPS 修复可能需要一段时间——我认为这只是 GPS 工作方式的一个自然部分。

于 2013-06-22T09:14:11.783 回答
0

LocationManager is buggy on many phones, since it depends heavily on the customized android open source code for specific hardware. Samsung phones are very buggy when it comes to LocationManager.

You should not use requestLocationUpdates, instead use getLastKnownLocation with a small hack. Just before the getLastKnownLocation call put the following hack and you should be able to use a AlarmManager to get regular updates.

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
        @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(final Location location) {
        }
    });

LocationClient is the other alternative to LocationManager. It is more accurate, uses a hello a lot less battery.

于 2013-06-23T12:41:31.390 回答