获取最准确位置的方法

时间:2013-09-18 10:10:39

标签: android android-location

在我的应用程序中,我有一个位置监听器,它记录了位置的准确性,并在我所在的地图上放置了一个标记,但精确度始终在900左右,我的位置在0.2到0.5英里之外的地方我实际上是。如果我加载谷歌地图,它会在几米内获得我的位置。

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

<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 Satelites已打开,Wi-Fi&amp;移动网络位置也在。

3 个答案:

答案 0 :(得分:10)

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

如果你知道你想要哪个提供商,最好明确指定它。您的应用程序可以与任一提供商合作,您可能想要让用户选择他想要使用的内容。不要依赖Android告诉你的东西,因为大多数便宜的设备都是可怕的配置,并且可能骗你。

答案 1 :(得分:4)

你只是在听LocationManager.NETWORK_PROVIDER。如果您想要更高的准确性,您必须倾听其他提供商,但请等一下:)

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

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

setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 

答案 2 :(得分:0)

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

取代此行 mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

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

  

我的建议是使用PRIORITY_BALANCED_POWER_ACCURACY