谷歌地图 - 位置在我的真实位置和0.6英里之外(随机地点)之间跳跃

时间:2014-03-08 19:54:43

标签: android google-maps gps location

我已经在我的应用上运行了Google Maps v2,使用服务获取用户位置。问题是位置不断变化。它显示了我的真实位置,然后跳转到我以前从未去过的随机位置。

我通过服务检查GPS /网络lat / lng并在我的地图类中调用它们,然后我在那里设置相机动画以移动到我的位置。我真的不知道什么是错的,或者从哪里开始。

有谁知道这是什么问题?这让我感到困惑。

我真的不知道要发布什么代码。通过网络定位的准确度为1121m,因为通过GPS定位的准确度大约为31.我使用的是LocationListeneronLocationChanged表示它正在使用我的网络位置,突然间准确度提高到29米,然后突然回升到1121米。这种情况大约每分钟左右发生一次。非常奇怪的行为。启用GPS后,不应该是首选的选择吗?一旦得到修复,有没有办法将其设置为我的首选?

我的服务获取的信息如下:

public Location getLocation() {
    Log.i("getLocation", "Get location called");
    try {
        locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

        //Getting GPS status
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        //Getting network status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled and GPS is off.
            Log.d("NOT ENABLED", "PASSIVE PROVIDER");
            locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
            loc = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
            if (loc != null) {
                latitude = loc.getLatitude();
                longitude = loc.getLongitude();
                Log.i("PASSIVE_LOCATION", "Location: "+loc.toString());
            }
        }
        else {
            this.canGetLocation = true;
            if (isNetworkEnabled) {
                Log.d("Network", "Network");
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
                loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (loc != null) {
                    latitude = loc.getLatitude();
                    longitude = loc.getLongitude();
                    Log.i("NETWORK_LOCATION", "Location: "+loc.toString());
                }
            }
            if (isGPSEnabled) {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("GPS Enabled", "GPS Enabled");
                loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if (loc != null) {
                    latitude = loc.getLatitude();
                    longitude = loc.getLongitude();
                    Log.i("GPS_LOCATION", "Location: "+loc.toString());
                }
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

    //check provider & accuracy
    Log.d("PROVIDER", loc.getProvider());
    Log.d("ACCURACY", Float.toString(loc.getAccuracy()));
    return loc;

如果有人可以提供帮助,我会非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:5)

我认为这解决了自己。仅仅因为准确性而在地点之间跳跃。一旦GPS精度优于网络,它就开始通过GPS进行更新。

我在onLocationChanged精度低于30时也停止了位置更新,因此我可以更多地控制并且不会浪费用户电池。