【问题标题】:Methods for getting the most accurate location获取最准确位置的方法
【发布时间】:2013-09-18 10:10:39
【问题描述】:

在我的应用程序中,我有一个位置侦听器,它会记录位置精度并在我所在的地图上放置一个标记,但是精度始终在 900 标记附近,并且我的位置在我所在位置的 0.2 到 0.5 英里之间实际上是。如果我加载谷歌地图,它会在几米之内得到我的位置。

有什么方法可以确保准确的位置?我的清单中有这些权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

这是我的听众

LocationListener searchUsingLocation = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    float accuracy = location.getAccuracy();
                    Log.d("FUApp", "Location changed: "+accuracy);
                    List<JSONObject> centres = sortVenuesByNearest(location);
                    try {
                        populateList(centres);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    setRefreshActionButtonState(false, R.id.search_using_location);

                }

                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {

                }

                @Override
                public void onProviderEnabled(String s) {

                }

                @Override
                public void onProviderDisabled(String s) {

                }
            };
            Log.d("FUApp", "Starting request");
            locationService.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 50, 5, searchUsingLocation);

编辑:还有我的手机设置,打开访问位置,打开 GPS 卫星,Wi-Fi 和移动网络位置也打开。

【问题讨论】:

    标签: android android-location


    【解决方案1】:

    Android 试图向我们掩盖硬件的真实情况,但实际上只有两个位置提供程序:GPS 和网络。 GPS定位速度很慢,并非所有设备都有,但它是准确的。网络定位速度更快,几乎所有设备都支持,但准确度较低。

    如果你知道你想要哪个提供者,你最好明确指定它。如果您的应用程序可以与任一提供商一起使用,您可能希望要求用户选择他想要使用的。不要依赖 Android 告诉您的信息,因为大多数廉价设备的配置都非常糟糕,而且可能会欺骗您。

    【讨论】:

    • 在我的应用程序中,位置并不那么重要,我只是希望它尽可能准确,所以我的好方法是先询问具体获取网络位置,然后那么如果可能的话,在获取 GPS 位置后?
    • 在这种情况下,您应该只使用 GPS 提供商。请记住,有些设备没有 GPS。因此,如果您希望他们能够使用您的应用程序,您可能需要包含一个选项来使用网络提供商。正如我之前所说,有些设备的配置非常糟糕,即使没有,他们也会说他们有 GPS 接收器。我自己也有这样的设备。
    • 好的,我来实现那个方法。谢谢 :)。只是出于好奇,你有什么设备可以做到这一点?
    【解决方案2】:

    你只是在听LocationManager.NETWORK_PROVIDER。如果你想要更准确,你必须听其他提供者,但请稍等:)

    Google 通过融合位置提供程序改进了其地图和位置管理。 https://developer.android.com/google/play-services/location.html

    具有融合位置;您不需要查询最佳位置提供商。如果您想获得高精度,只需将其设置为位置请求即可。

    setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
    

    【讨论】:

    • 这看起来很有趣。对于当前位置的持续监控,这很可能是要走的路。
    • 第二个链接 (kpbird) 已失效,只是重定向为网络钓鱼链接@Devrim 请更新
    【解决方案3】:

    几天前我遇到了同样的问题。我已将setPriority() 更改为PRIORITY_BALANCED_POWER_ACCURACY。它给我的准确位置可达 10 米。

    代替这一行 mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    添加此行 mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

    我的建议是使用PRIORITY_BALANCED_POWER_ACCURACY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2018-03-17
      • 2016-07-14
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多