1

在我的应用程序中,我有一个位置监听器,它会记录位置精度并在我所在的地图上放置一个标记,但是精度始终在 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 和移动网络位置也打开。

4

3 回答 3

11

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

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

于 2013-09-18T10:24:39.810 回答
4

你只是在听LocationManager.NETWORK_PROVIDER。如果您想获得更高的准确性,则必须听取其他提供者的意见,但请稍等:)

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

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

setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
于 2013-09-18T10:35:36.760 回答
0

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

而不是这条线 mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

添加这一行 mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

我的建议是使用PRIORITY_BALANCED_POWER_ACCURACY.

于 2017-02-09T09:45:51.267 回答