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

标签 android google-maps gps location

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

我通过服务检查 GPS/网络纬度/经度并在我的 map 类中调用它们,然后我在其中设置相机动画以移动到我的位置。我真的不知道出了什么问题,也不知道从哪里开始。

有人知道这是什么问题吗?这让我感到莫名其妙。

我真的不知道要发布什么代码。通过网络定位的精度为 1121 米,而通过 GPS 定位的精度约为 31。我正在使用 LocationListener 并且在 onLocationChanged 中表示它正在使用我的网络位置,突然精度提高到 29m,然后突然回到 1121m。这种情况大约每分钟发生一次。非常奇怪的行为。启用 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;

如果有人能提供帮助,我将不胜感激。提前谢谢你。

最佳答案

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

一旦 onLocationChanged 中的准确度低于 30,我也会停止位置更新,因此我有更多的控制权,不会浪费用户的电池。

关于android - 谷歌地图 - 位置不断在我的真实位置和 0.6 英里外(随机位置)之间跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274271/

相关文章:

android - Xamarin - 当我将我的应用程序发布到谷歌商店时,我应该使用什么 apk 包

android - Flipper Network 插件不显示网络请求

java - 折线不在路上 : it goes straight from one point to other

java - 在 GPS 上实现 A* 算法的开放和封闭列表

android - 使用函数 gethostbyname 将 C 编译为静态链接错误

android - 如何在android drawable中一个接一个地绘制多个形状类似于垂直方向的Liner布局

javascript - 谷歌地图需要刷新页面才能显示 map 图钉

python - Flask WTForms 上的经度纬度

android - 在android中立即获取位置

javascript - 仅 HTML/JS 和谷歌地图上的实时 GPS 跟踪器可以在手机上运行?可能吗?