Android: 如何保持GPS活动状态,直到提供更准确的位置?

6
我正在使用位置管理器的requestLocationUpdates()方法定期接收广播接收器的意图。系统正确地向我的接收器发送意图,我已经能够正确地使用它。唯一的问题是,GPS位置提供程序仅在初始位置获取后保持活动状态几秒钟,我需要它保持更长时间以使位置估计更准确。
我的问题是如何使GPS位置提供程序在来自LocationManager requestLocationUpdates的每个周期性请求中保持活动状态。有人知道如何做吗?
4个回答

9

尝试类似这样的方法,我认为这是正确的方法。

private void createGpsListner()
{
    gpsListener = new LocationListener(){
        public void onLocationChanged(Location location)
        {
           curLocation = location;

           // check if locations has accuracy data
           if(curLocation.hasAccuracy())
           {
               // Accuracy is in rage of 20 meters, stop listening we have a fix
               if(curLocation.getAccuracy() < 20)
               {
                   stopGpsListner();
               }
           }
        }
        public void onProviderDisabled(String provider){}
        public void onProviderEnabled(String provider){}
        public void onStatusChanged(String provider, int status, Bundle extras){}
    };
}

private void startGpsListener()
{

    if(myLocationManager != null)
        // hit location update in intervals of 5sec and after 10meters offset
        myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, gpsListener);   
}

private void stopGpsListner()
{
    if(myLocationManager != null)
        myLocationManager.removeUpdates(gpsListener);
}

1
感谢提供代码。hasAccuracy和getAccuracy对我很有帮助。但是有一个疑问,如果GPS在某些地方没有20的精度,那么它会一直搜索,对吗?应该怎么做呢? - SSS

0
为了定期获取GPS位置,从locationListener的onLocationChanged方法中获取位置,并在onResume方法中指定以毫秒为单位的时间间隔来获取定期更新。
onResume
location_manager.requestLocationUpdates(provider, 1000, 1, MainActivity.this);

0

如果你保持LocationListener处于活动状态,它应该会在定位精度变小时继续接收onLocationChanged()的更新。实际上location.getAccuracy()将告诉您当前的准确性。

也许将minTime和minDistance都设置为0以获得更频繁的更新?这将使用更多电池电量,但更加精确。


1
我正在使用带有PendingIntent版本方法的广播接收器。此外,修正精度确实变得更好,但它在达到其精度潜力之前就停止了更新,因此我不能仅使用getAccuracy()。我需要它继续更新直到精度大大提高,并且它没有等待足够长的时间。 - Doughy
我没有使用邻近警报。我正在请求LocationManager定期提供给我的应用程序通过广播接收器返回的修复程序,每当位置“更改”时都会发生这种情况。 LocationManager或GPS位置提供程序不能保持活动的时间足够长,以使位置非常准确。即使我使用监听器,这也无法改变GPS不保持活动状态很长时间的事实。 - Doughy
你尝试过使用jspcal的建议将minTime设置为0或类似值吗?如果这样做可以让你获得频繁更新并且很快变得足够准确(或者在超时后),那么你可以将LocationManager更新请求更新回所需的minTime值。 - Christopher Orr

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接