0

如果我从上一个位置移动 200 米,我创建了一个应用程序,它每 10 分钟生成一个位置。它基于网络和 gps 提供商。

我的问题是,如果我长时间在同一个地方,就会发生错误。让我们假设 gps 提供商生成了一个精度为 600 的位置,而网络提供商生成了一个精度为 800 的位置。我的应用程序将选择 gps 提供商,下一次 gps 生成位置的时间是我通过 200 个无线电但看起来网络位置不断生成位置,其中一些可能更准确,然后我的位置发生了变化而我在同一个地方。

这是一个问题,因为在同一个地方呆了几个小时会为我生成位置的音调而不是 1(这是我正在寻找的)。

我没有附上代码,因为我猜这是更理论的问题。

编辑代码附件

更新请求:

mLocationManager.requestLocationUpdates(provider, TEN_SECONDS*6*10, TEN_METERS*20, listener);

在位置之间进行选择:

    if(gpsLocation == null || gpsLocation.getAccuracy() > 1000)
    {
        if(!(networkLocation == null || networkLocation.getAccuracy() > 1000))
            location = networkLocation;
    }
    else
        if(networkLocation == null)
        {
            if(gpsLocation.getAccuracy() < 1000)
                location = gpsLocation;
        }
        else
            if(gpsLocation.getAccuracy() < networkLocation.getAccuracy() && gpsLocation.getAccuracy() < 500)
                location = gpsLocation;
            else
                if(networkLocation.getAccuracy() < 1000)
                    location = networkLocation;
    if(location!=null)
    {
        Message.obtain(mHandler,
                UPDATE_LATLNG,
                location.getLatitude() + ", " + location.getLongitude()).sendToTarget();
         if (mGeocoderAvailable) 
            doReverseGeocoding(location);
    }

这是处理程序:

   mHandler = new Handler() 
    {
        public void handleMessage(Message msg) 
        {
            if(msg.what == UPDATE_ADDRESS)
            {
                LocationService.this.address = (String) msg.obj;
                new SendLocation(LocationService.this.id,(String)msg.obj); //sends location to the db
                LocationService.this.gpsLocation = null;
                LocationService.this.networkLocation = null;
            }
        }
    };
4

1 回答 1

0

如果您通过 GPS 提供商获取位置,它会更准确,因此如果下次您通过网络提供商获取位置并且相差超过 500 米,则将其存储为值,如果位置小于此值由网络提供商提供跳过它。如果位置由 GPS 提供,则将其存储为当前位置。

于 2013-01-16T21:24:32.620 回答